1321:【例6.3】删数问题(Noip1994)
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 5127 通过数: 1595
【题目描述】
输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案使得剩下的数字组成的新数最小。
输出新的正整数。(n不超过240位)
输入数据均不需判错。
【输入】
n
s
【输出】
最后剩下的最小数。
【输入样例】
175438 4
【输出样例】
13
逐个选本位能取到的最小值,贪心,
#include<iostream> #include<cstring> using namespace std; int main(){ char a[250],b[250]; int n,ii=0; int s=0; cin>>a>>n; int l=strlen(a); for(int i=0;i<l-n;i++){//逐个取第i+1位的最小值,为局部最优即全局最优 int Min=59; for(int j=s;j<=n+i;j++){ if(a[j]<Min){ Min=a[j]; s=j+1; b[i]=Min; } } } while(b[0]=='0'){//去掉首位0 for(int i=0;i<l-1;i++) b[i]=b[i+1]; l--; } cout<<b<<endl; return 0; }