博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 2577 How to Type
阅读量:5156 次
发布时间:2019-06-13

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

毕竟水题,

可还是没能自己做出来。

不过有进步的是看了别人的解题思路便自己用代码实现了。

毕竟水题。

 

对状态转移方程的寻找还是没有什么思路,但有小小的体会:

所谓状态就是你开的dp数组能够记录从最开始的1个子问题最优解到最后整个状态的最优解。

首先你得dp数组得能记录每时每刻的状态,不能有信息丢失。

从打印第一个字符开始到最后一个字符,已经打印的字符的个数这是一个状态。

Caps Lock开没开这也是一个状态,所以这个题里面dp是两个维度。

而且状态转移方程的每次转换都要保证是从最优解转到最优解。

 

回到这个题上面来:

打字分这四种情况:

1、要打一个大写字母

         ①、打完这个字符大写锁定键是关着的

                   如果现在的状态时关着的,那么shift + key

                   如果现在的状态时开着的,那么CapsLock + key

         ②、打完这个字符大写锁定键是开着的

                   如果现在的状态时关着的,那么CapsLock + key

                   如果现在的状态时开着的,那么key

2、要打一个小写字母

         ①、打完这个字符大写锁定键是关着的

                   如果现在的状态时关着的,那么key

                   如果现在的状态时开着的,那么CapsLock + key

         ②、打完这个字符大写锁定键是开着的

                   如果现在的状态时关着的,那么key + CapsLock

                   如果现在的状态时开着的,那么shift + key

根据这个便可很容易的写出状态转移方程,具体见代码。

1 //#define LOCAL 2 #include 
3 #include
4 #include
5 #include
6 using namespace std; 7 8 int dp[110][2]; 9 10 int main(void)11 {12 #ifdef LOCAL13 freopen("2577in.txt", "r", stdin);14 #endif15 16 int n;17 char str[110];18 scanf("%d", &n);19 getchar();20 while(n--)21 {22 memset(dp, 0, sizeof(dp));23 gets(str + 1);24 int len = strlen(str + 1);25 dp[0][0] = 0;26 dp[0][1] = 1;27 int i;28 for(i = 1; i <= len; ++i)29 {30 if(str[i] >= 'A' && str[i] <= 'Z')31 {32 dp[i][0] = min(dp[i - 1][0] + 2, dp[i - 1][1] + 2);33 dp[i][1] = min(dp[i - 1][0] + 2, dp[i - 1][1] + 1);34 }35 else36 {37 dp[i][0] = min(dp[i - 1][0] + 1, dp[i - 1][1] + 2);38 dp[i][1] = min(dp[i - 1][0] + 2, dp[i - 1][1] + 2);39 }40 }41 42 int ans = min(dp[len][0], dp[len][1] + 1);43 printf("%d\n", ans);44 }45 return 0;46 }
代码君

 

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/3826954.html

你可能感兴趣的文章
BZOJ 1251: 序列终结者 [splay]
查看>>
5G边缘网络虚拟化的利器:vCPE和SD-WAN
查看>>
MATLAB基础入门笔记
查看>>
【UVA】434-Matty&#39;s Blocks
查看>>
Android开发技术周报 Issue#80
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
django知识点总结
查看>>
C++ STL stack、queue和vector的使用
查看>>
使用Reporting Services时遇到的小问题
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
js兼容公用方法
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>