删数 贪心

删数

时间限制(普通/Java):1000MS/2000MS          运行内存限制:65536KByte
总提交:80            测试通过:3

描述

    键盘输入一个正整数n(>=2位,<=100位),去掉其中的任意s(s < n的位数)个数字后使剩下的数字按照原来的次序组成一个新的正整数,编程对于给定的n和s,寻找一种方案,使得组成的新的正整数最小。

输入

输入有多组数据,每组数据包括原来的正整数n和删掉的位数s

输出

输出题目要求的最小正整数,要求输出前导零。

样例输入

16234 3

样例输出

12



考虑只删一个数的情况,最优解是删除出现的第一个左边>右边的数,因为删除之后高位减小,很容易想...那全局最优解也就是这个了,因为删除S个数字就相当于执行了S次删除一个数,因为留下的数总是当前最优解...贪心吧


#include<iostream>
#include<cstring>
#include<string>
using namespace std;
 int main()
 {
	 string a;
	 int c;
	 while(cin>>a>>c)
	 {
		 a=a+char('0'-1);
		 while(c--)
		 {
			 for(int i=0;i<=a.size()-2;++i)
				if(a[i]>a[i+1])
				{
					a.erase(a.begin()+i);
					break;
				}
		 }
		 a.erase(a.end()-1);   //删除
		 cout<<a<<endl;
	 }
	 return 0;
 }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值