题意:给出一个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]='