1、問題描述
給定n位正整數a,去掉其中任意k<=n個數字後,剩下的數字按原次序排列組成一個新的正整數。對於給定的n位正整數a和正整數k,設計一個算法找出剩下數字組成的新數最小的刪數方案。
輸入:
第1行是1個正整數a,第2行是正整數k
輸出:
對於給定的正整數a,編程計算刪去k個數字後得到的最小數。
樣例
2、思路
最近下降點優先的貪心策略
3、代碼實現
#include<iostream>
using namespace std;
int main(){
string a;///n位數a
int k;
cin>>a>>k;
///如果k≥n,數字被刪完了
if(k >= a.size())
a.erase();
else while(k > 0)
{
///尋找最近下降點
int i;
for(i=0;(i<a.size()-1) && (a[i] <= a[i+1]);++i);
a.erase(i, 1);///刪除xi
k--;
}
///刪除前導數字0
while(a.size() > 1 && a[0] == '0')
a.erase(0, 1);
cout<<a<<endl;
}