题义:给定一个不长于100的字符串,求输入完整个串的最少按键次数。
思路:对于打完每一个字符后,保留其保留大写锁定和非大写的两种状态的最少按键次数即可,做题中竟然忘了在大写锁定的时候可以shift+alphabet可以打出小写。
代码如下:
#include <cstdlib> #include <cstring> #include <cstdio> #include <cctype> #include <algorithm> using namespace std; int dp[105][2]; // 零表示以小写结尾,1代表以大写结尾 char s[105]; int DP() { int length = strlen(s+1); dp[0][1] = 1; for (int i = 1; i <= length; ++i) { if (islower(s[i])) { dp[i][0] = min(dp[i-1][0]+1, dp[i-1][1]+2); dp[i][1] = min(dp[i-1][0]+2, dp[i-1][1]+2); } else { dp[i][0] = min(dp[i-1][0]+2, dp[i-1][1]+2); dp[i][1] = min(dp[i-1][0]+2, dp[i-1][1]+1); } } return min(dp[length][0], dp[length][1]+1); } int main() { int T; for (scanf("%d", &T); T > 0; --T) { scanf("%s", s+1); printf("%d\n", DP()); } return 0; }