蓝桥杯备考----》贪心之删数问题
这道题首先第一种想法就是每次删除最大的数,比如测试用例175438 删除前四个最大的数,就是13,我们再举个例子,如果是72809,我们删除两次,按我们这个贪心的思想,就变成720,实际上是可以变成209的,so我们这个贪心策略不对。。。。
那我们应该怎么贪心呢?
我们可以由特殊情况推一般情况,
我们先试试一个完全递增的数该怎么删,
如果我们从a1到an这个递增的序列里删除最后一个数和在任意位置删一个数两种情况的话,删除最后一个位置是结果变小的情况
如果是递减序列a1到an,删除第一个数和删除任意位置数相比较
.如图,如果是递增序列,删除最后一个数是最小的情况,如果是递减序列,删除第一个数是最小的情况,我们要找的就是山峰位置
删数的时候,我们还要考虑有前导0的情况,比如1001,删除1后就是001,我们要删去前导0
ok话不多说我们来实现一下代码
#include <iostream>
using namespace std;
int main()
{
string s;cin >> s;
int k;cin >> k;
while(k--)
{
bool flag = false;
for(int i = 0;i<s.size()-1;i++)
{
if(s[i]>s[i+1])
{
s.erase(i,1);
flag = true;
break;
}
}
if(!flag) s.pop_back();
}
while(s[0]=='0'&&s.size()>1)
{
s.erase(0,1);
}
cout << s << endl;
return 0;
}