博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-2577 How to Type(递推,DP)(水)2017寒假集训
阅读量:4693 次
发布时间:2019-06-09

本文共 1221 字,大约阅读时间需要 4 分钟。

题意: 给出一个由大小写字母组成的字符串s,你的键盘初始状态是小写,你可以按一下shift切换一次大小写,或按Caps-Lock切换大小写,最后要把键盘恢复成小写,求打出这个字符串最少的按键次数

数据范围:|s| < 100 , t <= 100

思路:设dp[i][j]为前i个字母,状态为大写/小写时的最少按键次数

每次输入可以选择两种方式切换大小写

容易知道当s[i]为小写时,转移为dp[i][0] = min(dp[i-1][0]+1,dp[i-1][1]+2) 以此类推

最后答案为dp[n][0]和dp[n][1]+1中的较小者

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 7 const int mx = 110; 8 char s[mx]; 9 int dp[mx][2];10 11 int main(){12 int t;13 scanf("%d", &t);14 while (t--){15 memset(dp, 0, sizeof dp);16 scanf("%s", s+1);17 int len = strlen(s+1);18 dp[0][0] = 0;19 dp[0][1] = 1;20 for (int i = 1; i <= len; i++){21 if (islower(s[i])){22 dp[i][0] = min(dp[i-1][0]+1, dp[i-1][1]+2);23 dp[i][1] = min(dp[i-1][0]+2, dp[i-1][1]+2);24 }25 else {26 dp[i][0] = min(dp[i-1][0]+2, dp[i-1][1]+2);27 dp[i][1] = min(dp[i-1][0]+2, dp[i-1][1]+1);28 }29 }30 printf("%d\n", min(dp[len][0], dp[len][1]+1));31 }32 return 0;33 }

 

转载于:https://www.cnblogs.com/QAQorz/p/9016957.html

你可能感兴趣的文章
初级ant的学习
查看>>
redis数据结构--String
查看>>
POJ 3279 Fliptile (二进制枚举)
查看>>
memcached 细究(三)
查看>>
使用svn——项目的目录布局
查看>>
RSA System.Security.Cryptography.CryptographicException
查看>>
webservice整合spring cxf
查看>>
[解题报告] 100 - The 3n + 1 problem
查看>>
Entity Framework 学习高级篇1—改善EF代码的方法(上)
查看>>
Mybatis逆向工程配置文件详细介绍(转)
查看>>
String类的深入学习与理解
查看>>
不把DB放进容器的理由
查看>>
OnePage收集
查看>>
Java parseInt()方法
查看>>
yahoo的30条优化规则
查看>>
[CCF2015.09]题解
查看>>
[NYIST15]括号匹配(二)(区间dp)
查看>>
json_value.cpp : fatal error C1083: 无法打开编译器生成的文件:No such file or directory
查看>>
洛谷 P1101 单词方阵
查看>>
Swift DispatchQueue
查看>>