题目链接

一道 DP 问题

定义 \(\operatorname{dp}(i,j)\) 为敲完第 \(i\) 个字母且当前状态为 \(j\) 的最小花费,\(j=1\) 代表 Caps Lock(大写锁定)打开,\(j=0\) 代表 Caps Lock 关闭,则有:

如果第 \(i\) 个字母为大写:

\[\operatorname{dp}(i,1)=\min(\operatorname{dp}(i-1,0)+2,\operatorname{dp}(i-1,1)+1)\\\operatorname{dp}(i,0)=\min(\operatorname{dp}(i-1,0)+2,\operatorname{dp}(i-1,1)+2)
\]

如果第 \(i\) 个字母为小写:

\[\operatorname{dp}(i,1)=\min(\operatorname{dp}(i-1,0)+2,\operatorname{dp}(i-1,1)+2)\\\operatorname{dp}(i,0)=\min(\operatorname{dp}(i-1,0)+1,\operatorname{dp}(i-1,1)+2)
\]

目标状态为 \(\min(\operatorname{dp}(len,1)+1,\operatorname{dp}(len,0))\),其中 \(len\) 为字符串长度。

完整代码:

#include<bits/stdc++.h>
using namespace std;
int dp[105][2];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
string str;
cin>>str;
int len=str.length();
memset(dp,0x3f,sizeof(dp));
dp[0][0]=0;
dp[0][1]=1;
for(int i=1;i<=len;i++)
{
if(str[i-1]>='A'&&str[i-1]<='Z')
{
dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+1);
dp[i][0]=min(dp[i-1][0]+2,dp[i-1][1]+2);
}
else
{
dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+2);
dp[i][0]=min(dp[i-1][0]+1,dp[i-1][1]+2);
}
}
printf("%d\n",min(dp[len][1]+1,dp[len][0]));
}
return 0;
}

提交状态:

最新文章

  1. 项目管理详细任务(PMBOK2008)
  2. Ubuntu1604中mysql的登录问题
  3. 有利于SEO的DIV+CSS的命名规则
  4. 再谈Newtonsoft.Json高级用法
  5. How to mount a NFS share?
  6. SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题
  7. docker解决数据存储问题的方案
  8. 通过css3实现开关选择按钮
  9. Sqli-labs less 34
  10. 【转】Tarjan&amp;LCA题集
  11. 可用与禁用 E:enabled { sRules }
  12. windbg命令学习4
  13. poj3974(manacher)
  14. 1.Why Apache Spark?
  15. Numpy中Meshgrid函数介绍及2种应用场景
  16. 51nod1649- 齐头并进-最短路
  17. 关于Sublime Text 3的几个问题总结
  18. 面试:C++工厂模式实现
  19. 《深入应用C++11:代码优化与工程级应用》勘误表
  20. autofac生命周期入门(如何避免内存泄漏)

热门文章

  1. Spring中@Autowired、@Resource和@Inject注解的使用和区别
  2. RF元素定位的例子
  3. MySQL 学习网站
  4. Module build failed: Error: Cannot find module &#39;node-sass&#39;
  5. Windbg Register(寄存器)窗口的使用
  6. Codeforces Round #606 (Div. 2) E - Two Fairs(DFS,反向思维)
  7. Qt QThread两种方式的使用:1-继承QThread重写run函数; 2- 继承QObject并moveToThread &amp;&amp; 消息和槽在线程和依附线程间的传递
  8. 腾讯云VPS注意事项
  9. 对C++11中的`移动语义`与`右值引用`的介绍与讨论
  10. SKF密码设备研究