HDU 2577 How to Type(DP)
来源:互联网 发布:电子设备审计软件功能 编辑:程序博客网 时间:2024/05/21 09:38
题意:编辑一个字符串,初始时caps lock为关闭状态,问至少敲击多少次按键可以敲出给出的字符串,且最后时caps lock为关闭状态。也可以用Shift输入大写字母,Shift也算一次敲击。
分析:典型的dp。dp[i][0]表示敲完第i个字符时的最少敲击次数且此时caps lock为关闭的状态,dp[i][1]表示为打开的状态。那么当第i个字符为大写字母时,有转移方程:dp[i][1] = min(dp[i-1][1] + 1, dp[i-1][0] + 2); dp[i][0] = min(dp[i-1][1] + 2, dp[i-1][0] + 2);为小写字母时,转移方程:dp[i][0] = min(dp[i-1][0] + 1, dp[i-1][1] + 2); dp[i][1] = dp[i-1][1] + 2;
代码:
#include <algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdio>#include <vector>#include <string>#include <queue>#include <stack>#include <cmath>#include <set>#include <map>using namespace std;typedef long long LL;#define mem(a, n) memset(a, n, sizeof(a))#define ALL(v) v.begin(), v.end()#define si(a) scanf("%d", &a)#define sii(a, b) scanf("%d%d", &a, &b)#define siii(a, b, c) scanf("%d%d%d", &a, &b, &c)#define pb push_back#define eps 1e-8const int inf = 0x3f3f3f3f, N = 1e2 + 5, MOD = 1e9 + 7;int T, cas = 0;int n, m;int dp[N][2];char s[N];int main(){#ifdef LOCAL freopen("/Users/apple/input.txt", "r", stdin);//freopen("/Users/apple/out.txt", "w", stdout);#endif si(T); while(T --) { scanf("%s", s + 1); n = strlen(s + 1); mem(dp, 0); dp[0][1] = 1; for(int i = 1; i <= n; i ++) { if(s[i] >= 'A' && s[i] <= 'Z') {dp[i][1] = min(dp[i-1][1] + 1, dp[i-1][0] + 2);dp[i][0] = min(dp[i-1][1] + 2, dp[i-1][0] + 2);} else {dp[i][0] = min(dp[i-1][0] + 1, dp[i-1][1] + 2);dp[i][1] = dp[i-1][1] + 2;} } printf("%d\n", dp[n][0]); } return 0;}
0 0
- HDU 2577 How To Type DP
- hdu 2577 How to Type(DP)
- hdu 2577 How to Type(DP)
- HDU 2577 How to Type (dp)
- HDU 2577 How to Type(dp)
- 【DP】HDU 2577 How to Type
- HDU-2577 How to Type DP
- hdu 2577 How to Type (dp)
- 【DP|水】HDU-2577 How to Type
- HDU 2577 How to Type (dp)
- hdu 2577 How to Type(dp)
- HDU 2577 How to Type (线性dp)
- hdu 2577 How to Type(DP)
- hdu 2577 How to Type dp
- [HDU 2577 How to Type]DP
- HDU 2577 How to Type(DP)
- HDU 2577 How to Type DP
- hdu 2577 How to Type (dp)
- 使用Jersey实现应用服务器和图片服务器分离
- 设计模式
- svn 提交.a静态库文件方法
- scp命令
- 《学习日记》prototype,_proto_以及call\apply方法理解
- HDU 2577 How to Type(DP)
- LintCode-链表插入排序
- C++ Primer 学习笔记_19_语句 --if/switch/while/for语句
- POSTGRESQL 存储过程 select into 和 insert into select 两种表复制语句之间的差别
- mysql的查询、子查询及连接查询
- Openbr: nmake编译过程中出现 file DOWNLOAD HASH mismatch问题
- PBR:应用于虚幻引擎4贴图和材质创建的启示
- Web Service的三大技术
- android:layout_weight="1"