8-4 奖品的价值 uva11491(贪心)

  题意:给出一个n位整数   请删除d个数字 使得剩余数字最大

一开始写成窗口扫描  非常的麻烦易错

只要保证前d+1 降序即可  如果非降序   则删除

 很巧妙的贪心

每次读入和已经保存的数组相比较  若在d范围内能使得数组变大  那么执行  直到次数用完     位数越高 优先级越高

#include<bits/stdc++.h>
using namespace std;
#define N 200000+5

int main()
{
    int n,d;
    while(~scanf("%d%d",&n,&d)&&(n+d))
    {
        int k=0;
        char c;
        getchar();
        char a[100000];
        for(int i=0; i<n; i++)
        {
            c=getchar();
            while(k>0&&c>a[k]&&d>i-k) k--;// 删除的机会在承受范围内
            if(k<n-d)//k为当前填充了多少字符 没满则继续
            a[++k]=c;
        }
        a[++k]='';
        cout<<(a+1)<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/bxd123/p/10449945.html