题目转自hdu 2577,题目传送门


题目大意:

现给你n个区分大小写的字符串,大小写可用Caps Lock和shift切换(学过计算机的都知道)

但是有一点需要注意(shift是切换,若现在是大写锁定,用shift可切换成小写)


解题思路:

这道题一开始拿的时候,就觉得是n2的dp

但是,转移方程一直没想出来(0.25h)

后来又仔细想想,发现是2n的dp

然后想了想,20min就切了

我们先将字符串做预处理,形成一个01字符串

像这个测试数据:

HELlowORLd

可以转换成这样:


然后,就可以写转移方程了

如果目前的字符需要大写,就是这样:

dp[i][]=min(dp[i-][]+,dp[i-][]+)+;
dp[i][]=min(dp[i-][]+,dp[i-][])+;

dp[i][0]代表第i个字符,有大写锁定,dp[i][1]代表第i个字符,无大写锁定

若不需要大写,则是这样:

dp[i][]=min(dp[i-][]+,dp[i-][])+;
dp[i][]=min(dp[i-][]+,dp[i-][]+)+;

(意思自己理解,暴怒蒟蒻在线虐人)


然后就很简单了,AC代码如下(码风清奇,请勿怪罪)

#include<bits/stdc++.h>
using namespace std;
char s[];
int n,t[],dp[][];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
memset(t,,sizeof(t));
scanf("%s",&s);
int l=strlen(s);
for(int i=;i<l;i++) if(s[i]>= && s[i]<=) t[i]=;//预处理
dp[][]=;
if(t[]==) dp[][]=;
else dp[][]=;//初始化
for(int i=;i<l;i++)
{
if(t[i]==)
{
dp[i][]=min(dp[i-][]+,dp[i-][]+)+;
dp[i][]=min(dp[i-][]+,dp[i-][])+;
}
else
{
dp[i][]=min(dp[i-][]+,dp[i-][])+;
dp[i][]=min(dp[i-][]+,dp[i-][]+)+;
}//转移方程
}
printf("%d\n",min(dp[l-][],dp[l-][]+));//还需要比较
}
return ~~(-);//装个13
}

就这样,这道题就可以轻松AC了......

DP问题(1) : hdu 2577的更多相关文章

  1. HDU 2577 How to Type(dp题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2577 解题报告:有一个长度在100以内的字符串,并且这个字符串只有大写和小写字母组成,现在要把这些字符 ...

  2. HDU 2577 How to Type (线性dp)

    How to Type Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  3. HDU 2577 How to Type DP也可以模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=2577 大意: 大家都打过字吧,现在有个有趣的问题:给你一串字符串,有大写有小写,要求你按键次数最少来输出它,输出 ...

  4. HDU 2577 分情况多维DP

    How to Type Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. HDU 2577 How to Type【DP】

    题意:给出一个字符串,有大写有小写,问最少的按键次数.然后打字的这个人有一个习惯,打完所有的字之后,指示灯要关闭. dp[i][j]表示打到第i个字母,j有0,1两个值表示指示灯开或者关的状态 然后就 ...

  6. HDU 2577 How to Type (DP,经典)

    题意: 打字游戏,求所按的最少次数.给出一个串,其中有大小写,大写需要按下cap键切换到大写,或者在小写状态下按shift+键,这样算两次,打小写时则相反.注意:在打完所有字后,如果cap键是开着的, ...

  7. hdu 2577 How to Type(dp)

    Problem Description Pirates have finished developing the typing software. He called Cathy to test hi ...

  8. hdu 2577 How to Type(DP)

    How to Type Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  9. HDU 2577(DP)

    题意:要求一个字符串输入,按键盘的最少次数.有Caps Lock和Shift两种转换大小写输入的方式 思路:用dpa与dpb数组分别记录Caps Lock的开关状态,dpa表示不开,dpb表示开 代码 ...

随机推荐

  1. 匿名函数和for_each用法

    匿名函数,C++11的 for_each 用法 #include <iostream> #include <algorithm> #include "testClas ...

  2. 03Shell条件测试

    条件测试 Shell 条件测试 格式 1: test 条件表达式 格式 2: [ 条件表达式 ] 格式 3: [[ 条件表达式 ]] 具体参数说明可以通过 man test 进行查看 文件测试 [ 操 ...

  3. vuex 源码分析(七) module和namespaced 详解

    当项目非常大时,如果所有的状态都集中放到一个对象中,store 对象就有可能变得相当臃肿. 为了解决这个问题,Vuex允许我们将 store 分割成模块(module).每个模块拥有自己的 state ...

  4. python asyncio 使用ThreadPoolExecutor和asyncio完成阻塞IO请求

    #使用多线程:在协程中集成阻塞io import asyncio from concurrent.futures import ThreadPoolExecutor import socket fro ...

  5. python yield from (一)

    1. yield from 会抛出iterator中所有的值:而yield只是抛出传进来的值,如果是值,就抛出值,如果是iterator对象,抛出iterator对象 def g1(iterable) ...

  6. CompletableFuture2

    public class CompletableFuture2 { public static void main(String[] args) throws InterruptedException ...

  7. JavaScript ES6新特性介绍

    介绍 ES6:ECMScript6 首先,一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系? ECMAScript是一个国际通过的标准化脚本语言: JavaScript ...

  8. java函数式编程的形式

    java中没有真正的函数变量: 一.所有的函数(拉姆达)表达式,都被解释为functional interface @FunctionalInterface interface GreetingSer ...

  9. 【Maven】【IDEA】在idea中开发web项目,解决maven的jar包冲突的方法

    在idea中开发web项目,解决maven的jar包冲突的方法 第一步: 先对项目进行 clean ,再进行install 第二步: 出现NoSuchMethodException,ClassNotF ...

  10. OpenCV.Net基于傅里叶变换进行文本的旋转校正

    本文描述一种利用OpenCV及傅里叶变换识别图片中文本旋转角度并自动校正的方法,由于对C#比较熟,因此本文将使用OpenCVSharp. 文章参考了http://johnhany.net/2013/1 ...