动态规划之简单递推——hdu2577

来源:互联网 发布:淘宝xbox手柄 编辑:程序博客网 时间:2024/05/16 15:34

题目描述:

给出一个字母序列,从非大写锁定状态开始,敲完这个字母串,以非大写锁定状态结束,问最少按键盘的次数。

大致思路:

状态很好判断,定义dp[i][1]和dp[i][0]分别表示完成前i位键盘处于大写锁定状态和非大写锁定状态的最少操作次数。然后每次计算的时候从dp[i-1][0]和dp[i-1][1]转移即可。

代码:

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int dp[110][2];int main() {    int T;    cin>>T;    while (T--) {        char a[110];        scanf("%s",a);        memset(dp,0,sizeof(dp));        dp[0][1] = 1;        int l = strlen(a);        for (int i = 0; i < l; i++) {            if (a[i] <= 'z' && a[i] >= 'a') {                dp[i+1][0] = min(dp[i][0]+1,dp[i][1]+2);                dp[i+1][1] = min(dp[i][1]+2,dp[i][0]+2);            }            else {                dp[i+1][0] = min(dp[i][0]+2,dp[i][1]+2);                dp[i+1][1] = min(dp[i][0]+2,dp[i][1]+1);            }        }        cout<<min(dp[l][0],dp[l][1]+1)<<endl;    }}


0 0
原创粉丝点击