HDU2577 How to Type【DP】
启关闭大写和小写指示灯。
按Shift可转换将输入字母的大写和小写而不改变CapsLk的开关状态。Pirates有
一个坏习惯,假设输入的时候CapsLk是开着的,那么输入结束后必须把它关闭。
问,输入一个字符
串,最小的按键数目是多少
思路:
用两个数组dpa和dpb分别来表示CapsLk关闭状态和开启状态的最小操作数。
假设将要输入的字母是小写字母:
dpa[i+1] = min(dpa[i]+1,dpb[i]+2); 不开灯的情况下直接按字母,开灯情况则先关灯再按字母
dpb[i+1] = min(dpa[i]+2,dpb[i]+2); 不开灯的情况下按字母再开灯。开灯情况下Shift+按字母,
最后保持开灯状态
假设将要输入的字母是大写字母:
dpa[i+1] = min(dpa[i]+2,dpb[i]+2); 不开灯的情况下按Shift+字母,开灯情况下则按字母再关灯
dpb[i+1] = min(dpa[i]+2,dpb[i]+1); 不开灯的情况下开灯按字母。开灯情况下直接按字母
最后dpb[len]++,要把灯关掉。
初始化为dpa[0] = 0。dpb[0] = 1,由于dpb状态刚開始要开灯。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; int dpa[110],dpb[110];
char a[110]; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
getchar();
scanf("%s",a);
memset(dpa,0,sizeof(dpa));
memset(dpb,0,sizeof(dpb));
dpa[0] = 0;//dpa为关灯状态最小操作数
dpb[0] = 1;//dpb为开灯状态最小操作数
int len = strlen(a);
for(int i = 0; i < len; i++)
{
if(a[i]>='a' && a[i]<='z')
{
dpa[i+1] = min(dpa[i]+1,dpb[i]+2);
dpb[i+1] = min(dpa[i]+2,dpb[i]+2);
}
else
{
dpa[i+1] = min(dpa[i]+2,dpb[i]+2);
dpb[i+1] = min(dpa[i]+2,dpb[i]+1);
}
}
dpb[len]++;
int ans = min(dpa[len],dpb[len]);
printf("%d\n",ans);
}
return 0;
}
HDU2577 How to Type【DP】的更多相关文章
- HDU 2577 How to Type【DP】
题意:给出一个字符串,有大写有小写,问最少的按键次数.然后打字的这个人有一个习惯,打完所有的字之后,指示灯要关闭. dp[i][j]表示打到第i个字母,j有0,1两个值表示指示灯开或者关的状态 然后就 ...
- Kattis - honey【DP】
Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...
- HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...
- HDOJ 1501 Zipper 【DP】【DFS+剪枝】
HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- HDOJ 1257 最少拦截系统 【DP】
HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDOJ 1159 Common Subsequence【DP】
HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】
HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】
POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...
- HackerRank - common-child【DP】
HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...
随机推荐
- docker数据卷的管理和使用
数据卷的使用,数据库可以保证如果容器出现问题但是数据不丢失的作用,比如MySQL/date下的数据 或者Nginx根目录下的index.html 查看数据卷 [root@docker ~]# dock ...
- Java中数组在内存中的图解
Java中的数组在内存中的图解,其实对于数组,还是比较熟悉的,平时用的也是很多的,在看数据结构与算法的极客时间专栏,最常用的10个数据结构:数组.链表.栈.队列.散列表.二叉树.堆.跳表.图.Trie ...
- 【PS切图】前端工程师必备,但又无需精通的一项技能。
前端主要从事一些代码开发工作,PS使用是前端工程师必备,但又无需精通的一项技能. 前端切图四大面板:在“窗口”菜单下开启 1,信息(手动开启)2,字符(手动开启)3,历史记录(手动开启)4,图层(默认 ...
- Javascript创建对象几种方法解析
Javascript创建对象几种方法解析 Javascript面向对象编程一直是面试中的重点,将自己的理解整理如下,主要参考<Javascript高级程序设计 第三版>,欢迎批评指正. 通 ...
- 网络共享服务器 samba
之前给自己centos 服务器配置了一下samba网络共享,主要是在windwos上编程,然后方便代码同步到linux上进行编译,现在大概记录一下过程,免得下次又忘记了 首先获取root权限 :su ...
- [Python3网络爬虫开发实战] 1.6.2-Tornado的安装
Tornado是一个支持异步的Web框架,通过使用非阻塞I/O流,它可以支撑成千上万的开放连接,效率非常高,本节就来介绍一下它的安装方式. 1. 相关链接 GitHub:https://github. ...
- python多线程和多进程(二)
---恢复内容开始--- 一.多进程 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. impor ...
- tomcat:页面跳转
vim index.html <script language="javascript"type="text/javascript"> window ...
- 88-On Balance Volume 能量潮指标.(2015.7.4)
On Balance Volume 能量潮指标 ~计算方法: 如果当天的收盘价高于昨天的话,那么:OBV(i) = OBV(i-1)+VOLUME(i) 如果当天的收盘价低于昨天的话,那么:OBV(i ...
- table中JS选取行列
<table border="1" align="center" style="width: 500px" id="doct ...