【算法分析】
如果是直接删掉最大的数字,很容易便可举出反例:
1529 1
如果直接删最大的9,结果为152,如果删掉5,结果为129,显然删掉5才是最佳答案。
再看一组数据:
141519 2
如果删最大的9,5,结果为1411,如果删掉4,5,结果为1119,显然删掉4,5才是最佳答案。
发现什么了吗?
先看第一组:
1 5 1 9
小大 小 大
留删 留 留
第二组:
1 4 1 5 1 9
小 大 小 大 小 大
留 删 留 删 留 留
删掉的是“山峰”,也就是比后一个数大的数,且越靠前“山峰”越早删。
大体思路也就一句话:删除靠前的“山峰”。
【代码】
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 110;
char s[N];
int main(){
int T,n;
cin>>T;
while(T--){
cin>>s>>n;
int len = strlen(s);
while(n--){
for(int i=0;i<len-1;i++)
if(s[i] > s[i+1])
{
for(int j=i;j<len-1;j++)
s[j]=s[j+1];
break;
}
len--;
}
s[len]='\0';
cout<<s<<endl;
}
return 0;
}