贪心定义:
简单来说,贪心就是在所有方法中找到最优秀的方法;
例题:删数问题
- 一个高精度的正整数,去掉其中s个数后剩下的数按次序将数字组成的新数最小。
- 这个题要求删掉几个数,然后最小,很多人一定首先想到’sort’,然后挑大的数删。
- 但贪心往往就会因为考虑不周到而错的,有可能最优并没有考虑的,还有可能只过了样例但过不了特殊数据。像这一题,最优的方案应该是:满足(1.位数大2.数字大)这两个要求。
- 例如
- 15639;
2;
如果删最大数就变为了153;(先删9再删6)
但如果用后面的思路就变为了139;(先删6再删5)
153>139(后面是最优方案) - 总结一下,首先输入字符串(这题要用到高精度)输入s——删掉的个数,把字符串储存到a整型数组里;
- 接着循环s遍——如果删够了就停止了;里面也是一重循环枚举1到n——为了找到特殊情况;
- 判断特殊情况——两个位数较高的数,且前一个数大于后一个数,就删掉前一个数;
- 从头开始枚举新的数组,重复上一步;
- 最后要注意一点,一直不过可能就卡在这里了——前导零!!!
- 大体懂了思路,开始码代码
(一)输入
cin>>s1;
n=s1.size();
for(int i=0;i<=n;i++)//字符串从零开始
{
a[