【贪心算法初学】删数问题
来源:互联网 发布:网络中的涵化理论 编辑:程序博客网 时间:2024/05/21 06:28
题目:
键盘输入一个高精度的正整数n(<=240位),
去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。
编程对给定的n和s,寻找一种方案,使得剩下的数最小。
Simple Input
178543
4
Simple Output
13
首先:N超过200位,肯定要用字符串数组来进行存储。我们知道字符串数组隐含的'\0'作为结束符。当然,我们也可以用strlen()函数来直接计算字符串长度。
第二步,如何删除数字。假定只删除一个数字。每一步总是选择一个使剩下的数最小的数字删除,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字;否则删除第一个递减区间的首字符,这样删一位便形成了一个新的数字串。然后回到串首,按上述规则再删除下一个数字。这样循环删除s个数字即可完成。
还要注意一点的是,每删除一个数字,就要从这个数组的第一个单元开始重新判断。所以,用当型循环比较合适。每判断到一个可以删除的数,就结束判断。
本题难度不大,但是要理解贪心算法的本质:从问题的某一个初始解出发,向给定的目标推进。推进的每一步做一个当时看似最佳的贪心选择。不断的将问题规模缩小。并由所有的局部最优选择产生一个全局最优解。
#include<iostream>#include<cstring>using namespace std;int main(){string n;int s, i, x, len;cin >> n >> s;i = -1, x = 0;len = n.length();while(x < s){i++;if(n[i] > n[i+1]) //出现递减,删除递减的首字母 {n.erase(i, 1);x++; //x统计删除数字的个数i = -1; //从头开始查递减区间 }}i = 0;while(n[i] == '0'){i++;}cout << n.substr(i, len) <<endl; return 0;}
0 0
- 【贪心算法初学】删数问题
- 贪心算法 - 删数问题
- 贪心算法-删数问题
- 贪心算法---删数问题
- 贪心算法,删数问题
- 贪心算法 - 删数问题
- 算法:(贪心算法)--删数问题
- 问题 A: [贪心算法]删数问题
- 贪心算法之删数问题
- 贪心算法—删数问题
- OJ3RD 1181 删数问题 - 贪心算法
- 贪心算法之删数问题
- 贪心算法例题:2072删数问题
- C++贪心算法之删数问题
- C++ 之 贪心算法 ( 删数问题 )
- 贪心算法——删数问题
- SDUT 贪心算法 删数问题
- 删数问题(典型的贪心算法问题)
- 学习笔记 (Linux下使用mysqldump工具导出数据库总结) [第三课]
- 十二星座----射手
- mysql配置
- C语言对其方式--struct数据结构必学
- C++笔记(1)explicit构造函数
- 【贪心算法初学】删数问题
- LeetCode刷题笔录 Reverse Integer
- 我的波兰佬Coach
- Ajax工作原理
- THINKPHP使用自动表单变量更新数据表所存在的字段不全问题
- 北京圣思园JAVA培训教学视频汇总
- AndroidStudio打包so文件解决办法
- 爱就是爱不爱就是不爱
- 过了正月十五春天就算来了