ACM程序设计选修课——1049: Efface Numbers(贪心)
1049: Efface Numbers
Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 9 Solved: 4
[Submit][Status][Web Board]
Description
你有一个长度为n的数字串, 现在要求你删除其中k个数字, 使得剩下的数字在不改变原有顺序的情况下,组成的数字最大.
Input
每组数据包含一个数字串(1 <= n <= 1000),和一个整数k (0 <= k < n).
Output
对于每组数据, 输出你的答案.
Sample Input
1452 2
33 0
Sample Output
52
33
做法:从左到右找到第一次出现的递减序列的最后一个值,删掉它。结尾用substr来保
证本身长度只有2但并非递减的情况
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<queue> #include<set> #include<map> #include<sstream> #include<algorithm> #include<cmath> #include<cstdlib> using namespace std; int main (void) { string s; int i,j,k; while (cin>>s>>k) { int len=s.size(); int tlen=len; for (j=0; j<k; j++) { for (i=0; i<len; i++) { if(s[i]<s[i+1]) { s.erase(i,1); len--; break; } } } cout<<s.substr(0,tlen-k)<<endl; } return 0; }