题意:给你一个数, 要求删去一些数字, 使得剩下的数字最大。

这道题用贪心解决。

大家想一想, 两个数比较大小, 肯定先比较第一位的数,然后依次比较第二位,以此类推。

既然我们要保证最后的数字最大, 那么一定要先保证第一位数的最大, 然后保证第二位数最大,以此类推。

所以贪心策略就是在能删除的范围内选择最大的数字,把最大的数字之前的数字删除, 把最大的数字留在最前面

然后一直这么做下去就ok了。

比如3759, 能删两个数。也就是说第一位要不是3要不是7要不是5, 7最大, 所以保留7, 删去3。然后

还能删去1个数字。目前的数字是759, 7已经确定为第一位了,不理它,现在确定第二位。

只能删一个数的时候, 第二位要不是5要不是是9, 留下9删去5.

所以答案是79.

#include<cstdio>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 112345;
int a[MAXN], n, d; int main()
{
while(~scanf("%d%d", &n, &d) && n && d)
{
REP(i, 0, n) scanf("%1d", &a[i]);
int temp = d; int pos = 0;
while(d > 0 && pos < n) //pos < n 不能省去, 不然会RE
{
int ma = -1, t = pos;
REP(i, t, t + d + 1)
if(a[i] > ma)
{
pos = i;
ma = a[i];
}
REP(i, t, pos) a[i] = -1, d--;
pos++; //删完后从下一位开始继续找
} int num = n - temp;
REP(i, 0, n)
if(a[i] != -1)
{
printf("%d", a[i]);
num--;
if(num == 0) break; //一共只能有n-d个数, 剩下的不要
} puts("");
} return 0;
}

最新文章

  1. [原创]基于rsync算法的目的性改进-RexSync
  2. 结构体快排回顾(sort)
  3. 微信开发笔记(一)通过.net如何实现接入微信
  4. CMake with Win&amp;MinGW
  5. EJB3Persistence开发手册-原生SQL查询(NativeSQL)
  6. 不只是打车软件,中国车主们赋予了Uber更多意义
  7. 基于ARM-LINUX的温度传感器驱动(DS18B20) .
  8. CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
  9. Developing your first FNC custom control
  10. dump报文转换为wrieshark报文
  11. tap是什么意思
  12. Android SDK教程
  13. python的__init__几种方法总结
  14. 关于字符latin capital letter sharp s &quot;&#223;&quot;( U+1E9E)显示的问题
  15. leetcode — spiral-matrix-ii
  16. 3张表实现RBAC
  17. Oracle HAVING子句 - 转
  18. MyBatis基础入门《十八》动态SQL(if-where)
  19. 关于c++输出中的endl
  20. 使用node连接MongoDB数据 综本地及linux服务器记

热门文章

  1. vue实现分页器(仿element)
  2. HDU 4458 Shoot the Airplane( 判断点在多边形内外 )
  3. VUE:模板语法(小白自学)
  4. SpringBoot中打包设置,将配置文件打包在外部
  5. 练几道,继续过Hard题目
  6. [HTML5] Inlining images with SVG and data URIs
  7. Dalvik虚拟机垃圾收集(GC)过程分析
  8. WebStorm配置github
  9. nyoj--983--首尾相连数组的最大子数组和(动态规划)
  10. 正睿NOIP赠送附加赛1