题意:给你一个字符串,问你所有的大写字母都要在所有的小写字母的右边,你一个操作可以改变一个字母的大小写,问你满足条件的最小步数。
解题思路:DP
解题代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 // File Name: 180c.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月21日 星期六 08时40分08秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stack> 11 #include<bitset> 12 #include<algorithm> 13 #include<functional> 14 #include<numeric> 15 #include<utility> 16 #include<sstream> 17 #include<iostream> 18 #include<iomanip> 19 #include<cstdio> 20 #include<cmath> 21 #include<cstdlib> 22 #include<cstring> 23 #include<ctime> 24 #define LL long long 25 26 using namespace std; 27 int big; 28 int small; 29 char str[100500]; 30 int main(){ 31 scanf("%s",str); 32 int len = strlen(str); 33 for(int i = 0 ;i < len; i ++) 34 { 35 if(str[i] <= 'Z') 36 big ++ ; 37 else 38 small ++; 39 } 40 int mi = min(big,small) ; 41 int tbig,tsmall; 42 tbig = tsmall = 0; 43 for(int i = 0 ;i < len;i ++) 44 { 45 if(str[i] <= 'Z') 46 tbig ++ ; 47 else tsmall ++ ; 48 mi = min(mi,tsmall+big - tbig); 49 } 50 printf("%d\n",mi); 51 return 0; 52 }