删数问题
-
Description
- 给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最小的删数方案。 Input
- 第 1 行是1 个正整数 a。第 2 行是正整数k。 Output
- 输出最小数
Example Input
178543
4
Example Output
13
-
思路分析
-
1) 贪心法求解:删k个数符的全局最优解,包含了删除1个数符的子问题的最优解。
2) 以字符串形式输入s,使用尽可能逼近目标的贪心法来逐一删去其中的k个数符,每一步总是选择一个能使剩下的数最小的数符删去
代码块
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string str;
int m;
getline(cin,str);
cin >> m;
for(int i=0; i<m; i++)
{
for(int j=0; j<str.length()-1; j++)
{
if(str[j] > str[j+1])
{
str.erase(j,1);
break;
}
}
}
while(str[0] == '0')
str.erase(0,1);
cout << str << endl;
return 0;
}