题目链接:http://codeforces.com/problemset/problem/180/C

题意:

  给你一个仅包含大写字母和小写字母的字符串,你可以将让小写字母转化为大写字母,大写字母转化为小写字母,求最好的操作步数使得最后的字符串左边全是大写字母,右边全是小写字母.

思路:

有点像是树状DP,把每个字母看成一个节点,后一个字母为前一个字母的父节点.给予每个节点两种状态:

  状态一(dplow[i]) : 当字符串长度为 i 时,第 i 个字母为小写(转化后),得到符合条件的字符串的最少操作步数.

  状态二(dpsup[i]) : 当字符串长度为 i 时,第 i 个字母为大写(转化后),得到符合条件的字符串的最少操作步数.

那么最后的答案取最后一个字母的两个状态中值小的那么就好了, 接下来分析下状态转移方程:

  如果第 i 个字母为小写:

    对于其状态一 : 不需要转化,当前节点本身为小写.因为当前状态可以由其子节点的状态一和状态二转移而来,所以只要取其中比较小的就好了,DP转移方程:

      dplow[i] = min ( dplow[i - 1], dpsup[ i - 1]);

    对于其状态二 : 转化完成后,当前节点为大写,那么当前状态只能由其子节点的状态二转移而来.所以当前的值为其子节点状态二的值加 1,DP转移方程为:

      dpsup[i] = dpsup[ i - 1] + 1;

  如果第 i 个字母为大写:

    对于其状态一 : 转化为小写之后, 当前的状态可以由其子节点的状态一和状态二转移而来,所以当前值为其子节点两个状态值比较小的那个加 1,DP转移方程为:

      dplow[i] = min ( dplow[i - 1], dpsup[ i - 1]) + 1;

    对于其状态二 : 不需要转化,当前状态只能由其子节点的状态二转移而来.所以当前值就是其子节点状态二的值,DP转移方程为:

      dpsup[i] = dpsup[i - 1];

至此,状态转移就分析完成了.实现上,由于父节点只和其子节点的状态有关,所以用两个变量就好了.

代码:

 #include <bits/stdc++.h>

 using namespace std;
const int MAXN = ;
char s[MAXN + ]; void DFS(int k, int &tolow, int &tosup) {
if(k == ) { isupper(s[k]) ? tolow = : tosup = ; return ; }
DFS(k - , tolow, tosup); tolow = min(tolow, tosup);
isupper(s[k]) ? tolow++ : tosup ++;
} int main() {
ios_base::sync_with_stdio(); cin.tie(); cin >> s;
int len = strlen(s), low = , sup = ;
DFS(len - , low, sup);
cout << min(low, sup) << endl;
return ;
}

Codeforces 180C. Letter的更多相关文章

  1. Codeforces 180C - Letter - [简单DP]

    题目链接:http://codeforces.com/problemset/problem/180/C 题意: 有一段字符串,包含大小写字母,每次可以将其中一个字母由大写变成小写,或者小写变成大写.要 ...

  2. Codeforces 180C Letter:dp

    题目链接:http://codeforces.com/problemset/problem/180/C 题意: 给你一个字符串s,长度为n. 让你将这个字符串变成“前面一段都是大写字母,后面一段都是小 ...

  3. codeforces 14A - Letter & codeforces 859B - Lazy Security Guard - [周赛水题]

    就像title说的,是昨天(2017/9/17)周赛的两道水题…… 题目链接:http://codeforces.com/problemset/problem/14/A time limit per ...

  4. CodeForces - 43B Letter

    字符串的处理 统计已有字符的个数 和需求字符比较 #include <iostream> #include <stdio.h> #include <string.h> ...

  5. Codeforces Round #284 (Div. 2)A B C 模拟 数学

    A. Watching a movie time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. cf499B-Lecture 【map】

    http://codeforces.com/problemset/problem/499/B B. Lecture     You have a new professor of graph theo ...

  7. 物联网学生科协第三届H-star现场编程比赛

    问题 A: 剪纸片 时间限制: 1 Sec 内存限制: 128 MB 题目描写叙述 这是一道简单的题目,假如你身边有一张纸.一把剪刀.在H-star的比赛现场,你会这么做: 1. 将这张纸剪成两片(平 ...

  8. Codeforces Round #116 (Div. 2, ACM-ICPC Rules) C. Letter 暴力

    C. Letter Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/180/problem/C D ...

  9. Codeforces Beta Round #14 (Div. 2) A. Letter 水题

    A. Letter 题目连接: http://www.codeforces.com/contest/14/problem/A Description A boy Bob likes to draw. ...

随机推荐

  1. Word2010 自动生成二级编号

    http://jingyan.baidu.com/article/3ea5148901919752e61bbafe.html

  2. ZOJ 3229 Shoot the Bullet | 有源汇可行流

    题目: 射命丸文要给幻想乡的居民照相,共照n天m个人,每天射命丸文照相数不多于d个,且一个人n天一共被拍的照片不能少于g个,且每天可照的人有限制,且这些人今天照的相片必须在[l,r]以内,求是否有可行 ...

  3. 【bzoj2756 奇怪的游戏】

    Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 4403  Solved: 1226[Submit][Status][Discuss] Descript ...

  4. [学习笔记]可持久化数据结构——数组、并查集、平衡树、Trie树

    可持久化:支持查询历史版本和在历史版本上修改 可持久化数组 主席树做即可. [模板]可持久化数组(可持久化线段树/平衡树) 可持久化并查集 可持久化并查集 主席树做即可. 要按秩合并.(路径压缩每次建 ...

  5. 【COGS 461】[网络流24题] 餐巾 最小费用最大流

    既然是最小费用最大流我们就用最大流来限制其一定能把每天跑满,那么把每个表示天的点向T连流量为其所需餐巾,费用为0的边,然后又与每天的餐巾对于买是无限制的因此从S向每个表示天的点连流量为INF,费用为一 ...

  6. POJ3159:Candies(差分约束)

    Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 39666   Accepted: 11168 题目链接:h ...

  7. 几种不同的json格式解析

    转连接: http://blog.csdn.net/whx405831799/article/details/42171191 内容很好 给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分 ...

  8. DIV的变高与变宽

    代码: <!DOCTYPE HTML><html><head> <meta charset="utf-8"> <title&g ...

  9. netty入门代码学习

    服务端代码: package com.lsp.netty; /** * @author lishupeng * @create 2017-05-27 下午 3:48 **/ import io.net ...

  10. Lucene4.6查询时完全跳过打分,提高查询效率的实现方式

    由于索引的文件量比较大,而且应用中不需要对文档进行打分,只需要查询出所有满足条件的文档.所以需要跳过打分来提高查询效率.一开始想用ConstantScoreQuery,但是测试发现这个类虽然让所有返回 ...