题目链接

一道 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;
}

提交状态:

HDU2577 How to Type的更多相关文章

  1. HDU2577 How to Type 2016-09-11 14:05 29人阅读 评论(0) 收藏

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

  2. HDU2577 How to Type【DP】

    题目链接: pid=2577">http://acm.hdu.edu.cn/showproblem.php? pid=2577 题目大意: 给你一个仅仅包括大写和小写字母的字符串,如今 ...

  3. [HDU2577]How to Type(DP)

    题目链接 题意 给一个大小写字符串,求最少敲击字符串次数,最开始和最后要求shift都是down的.如日常,大小写转换可以ctrl+z或者shift保持 up/down. 题解 两个dp数组,一个表示 ...

  4. HDU2577:How to Type(DP)

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

  5. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)

    本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...

  6. AutoMapper:Unmapped members were found. Review the types and members below. Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 应用场景:ViewModel==>Mode映射的时候出错 AutoMappe ...

  7. $.type 怎么精确判断对象类型的 --(源码学习2)

    目标:  var a = [1,2,3];     console.log(typeof a); //->object     console.log($.type(a)); //->ar ...

  8. input type='file'上传控件假样式

    采用bootstrap框架样式 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> &l ...

  9. mount报错: you must specify the filesystem type

    在linux mount /dev/vdb 到 /home 分区时报错: # mount /dev/vdb /homemount: you must specify the filesystem ty ...

随机推荐

  1. django 权限设置 左侧菜单点击显示,面包屑

    1.左侧菜单点击显示 就是在点击的时候保留点击的功能 方法. 1.加入新的字段,pid来判断 class Permission(models.Model): """ 权限 ...

  2. Windows下Redis安装配置和使用注意事项

    Windows下Redis安装配置和使用注意事项 一:下载 下载地址: https://github.com/microsoftarchive/redis/releases 文件介绍: 本文以3.2. ...

  3. 201671030126 赵佳平 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于那个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 作业学习目标 掌握软件项目评审会流程:反思 ...

  4. django认证系统-user对象(创建,改密,认证)

    User对象 User对象是认证系统的核心.它们通常表示与你的站点进行交互的用户,并用于启用限制访问.注册用户信息和关联内容给创建者等.在Django的认证框架中只存在一种类型的用户,因此诸如'sup ...

  5. contest4 CF1091 div2 ooooxx ooooxx ooooox

    题意 div2E 一个有\(n+1\)个点的无向图, 给出\(n\)个点的度数, 求出每一种可能的\(n+1\)的度数 (题面附带公式 graph realization problem)

  6. 第10组 Alpha事后诸葛亮

    一.组长博客链接 组长博客 二.总结思考 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的APP主要解决大学生闲置物品处理问题,定义的很清楚,用户 ...

  7. <每日 1 OJ> -LeetCode20. 有效的括号

    题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可 ...

  8. AQS源码的简单理解

    概念 AQS全称 AbstractQueuedSynchronizer. AQS是一个并发包的基础组件,用来实现各种锁,各种同步组件的.它包含了state变量.加锁线程.等待队列等并发中的核心组件. ...

  9. prometheus、node_exporter、cAdvisor常用参数

    本节将介绍一下我在使用过程中用到的promethues.node_exporter.cAdvisor的常用参数,做一个总结 一.prometheus prometheus分为容器安装和二进制文件安装, ...

  10. PHP strlen 对中文 的定义

    $zhStr = ‘您好,中国!’; // gbk编码下每个中文字符所占字节为2echo strlen($zhStr); // 输出:12 //utf-8编码下每个中文字符所占字节为3 echo st ...