ACM程序设计选修课——1049: Efface Numbers(贪心)

1049: Efface Numbers

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 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;
}
posted @ 2016-03-18 21:09  Blackops  阅读(205)  评论(0编辑  收藏  举报