首页 > 代码库 > UVa 11491 奖品的价值

UVa 11491 奖品的价值

https://vjudge.net/problem/UVA-11491

题意:一个n位整数,删除其中的d个数字,输出最大值。

思路:肯定从高位开始分析,代码如下。

 1 #include<string> 2 #include<iostream>   3 using namespace std; 4  5 const int maxn = 100000 + 5; 6  7 int n, d; 8 char a[maxn]; 9 10 int main()11 {12     //freopen("D:\\txt.txt", "r", stdin);13     while (cin>>n>>d && n&&d)14     {15         getchar();16         int k = 0;17         for (int i = 0; i < n; i++)18         {19             char c = getchar();20             while (k>0 && k+(n-i)>n-d && a[k] < c)//需要保留n-d个数字,已经填写到第k个,还有n-i个未填写  21                 k--;                      //若k+(n-i)>n-d,说明已经填写的当中有需要删除的,此时选择删除小于c的数字  22             if (k < n-d) a[++k] = c;//若k<n-d,说明还没有填写够n-d个数字  23         }24         a[++k] = \0;25         cout << a+1 << endl;26     }27     return 0;28 }

 

UVa 11491 奖品的价值