题意:给你一个n位整数,让你删掉d个数字,剩下的数字要尽量大。

题解:因为最后数字位数是确定的,而且低位数字对答案的贡献是一定不及高位数字的,所以优先选择选最大且最靠左边的数字,但是有一个限制,选完这个数字以后右边剩下的数字要保证足够接下来的选择,所以想到了优先队列,记录一个信息,选的数字所在的位置,以及上一个数字所在的位置,如果当前出队的数字在上一个选的位置前面就直接丢掉,每次选完一个以后剩下要选的数字就减少了,满足限制的条件的数字会增加,再把新的待选数字加入队列。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
struct dig
{int val,pos;bool operator < (const dig & rhs) const {return val < rhs.val || (val == rhs.val && pos > rhs.pos);}
}D[maxn];priority_queue<dig> q;int n,d;
void sovle()
{while(q.size()) q.pop();int i;for(i = 0; i <= d; i++) {q.push(D[i]);}int Need = n-d,pre = -1;while(Need){while(q.top().pos<pre) q.pop();const dig &u = q.top();if(u.pos == n-Need) {for(i = u.pos; i < n; i++)printf("%d",D[i].val);break;}pre = u.pos;printf("%d",u.val);Need--; q.pop();q.push(D[i++]);}putchar('\n');
}int main()
{// freopen("in.txt","r",stdin);while(scanf("%d%d",&n,&d),n){for(int i = 0; i < n; i++){scanf("%1d",&D[i].val);D[i].pos = i;}sovle();}return 0;
}

转载于:https://www.cnblogs.com/jerryRey/p/4698881.html

UVA 11491 Erasing and Winning 奖品的价值 (贪心)相关推荐

  1. UVA - 11491 Erasing and Winning(奖品的价值)(贪心)

    题意:有一个n位整数(不以0开头),要求删除其中的d个数字,使结果尽量大.(1<=d<n<=10^5) 分析: 1.从头扫一遍,如果当前填的数字小于n-d,则将当前数字填上. 2.如 ...

  2. UVA 11491 - Erasing and Winning 贪心水题

    题目链接:UVA 11491 - Erasing and Winning(考虑到UVA的访问不是很方便,这里就放个vjudge的链接吧) 题目 Description Juliano is a fan ...

  3. uva 11491——Erasing and Winning

    题意:给定一个n位的整数,要求从中去掉k位,使得剩下的数字最大. 思路:单调队列.在满足删除的数等于k 的前提下求一个不敌减的序列. code: #include <iostream> # ...

  4. uva 11491 Erasing and Winning

    明明10e5*10不会超时的, 超了半天, 伤心死了, 优化半天才勉强过了. Accepted 0 KB 882 ms C++ 4.8.2 代码应该还算好理解吧. #include<cstdio ...

  5. UVA - 11491 Erasing and Winning

    // 在满足要求的情况下找已经选出的答案. // #include<iostream> #include<cstdio> #include<string> usin ...

  6. Uva 11491 Erasing and Winning(贪心)

    这道题看了别人的博客才做出来的,思路还是不行. 解题思路:因为要获得最大的数,所以从高位开始枚举,再从这一位向前扫一遍删掉比这一位小的数,当碰到比它大的数时结束.最后扫完一遍后,如果删的数不够m,再从 ...

  7. 11491 - Erasing and Winning(贪心)

    一开始真的没想到这竟然是一道贪心题目.  不过后来仔细想想也就明白了. 我采取的做法是自前向后扫一遍,用一个指针rear动态维护答案数组中的最后一个元素,如果遇到一个比它大的数s[i],那么从它开始将 ...

  8. UVa 11491 奖品的价值(Erasing and Winning)

    题意: 你是一个电视节目的获奖嘉宾.主持人在黑板上写出一个n位整数,邀请你删除其中的d个数字,剩下的整数便是你所得到的的奖品的价值.当然,你希望这个价值尽量大, 分析: 贪心,一旦发现比前面大,就吃掉 ...

  9. 奖品的价值 Erasing and Winning

    //紫书P253 奖品的价值 //Serene #include<algorithm> #include<iostream> #include<cstring> # ...

最新文章

  1. python基础-模块导入
  2. python中的序列总结:列表,元组,字符串
  3. JavaScript绑定键盘事件的多种写法
  4. 操作系统(十三)处理机调度的概念、层次
  5. JAVA网络编程Socket常见问题 【长连接专题】
  6. java上传永久图文素材_Java-微信开发上传永久素材(支持所有文件类型)
  7. HDU 4414 Finding crosses(搜索)
  8. [转]常用Delphi开发资料网址
  9. 基于keepalived 实现VIP转移,lvs,nginx的高可用
  10. 【Python】之split()方法
  11. Ant 构建文件的一种写法
  12. 【java】线程的简单使用以及注意的问题
  13. java jdbc 占位符_java-jdbc
  14. 【昊鼎王五】win10电脑如何设置让背景色变成保护眼睛的绿豆色?
  15. 辗转相除法求最大公因数
  16. BLE蓝牙应用生成Android/iOS APP以及小程序
  17. 教你如何试用华为云服务器
  18. 问题小结:解决Ubuntu18.04系统无法连接WIFI
  19. 中国大学 MOOC C语言程序设计----编程部分答案解析
  20. linux 访问西数网盘,西数不认盘,无法访问固件

热门文章

  1. vscode 使用ssh密钥登录远程Linux -- vscode remote linux ssh key
  2. php vendor 删除,yii2我删除了vendor目录,然后重新composer install composer update就不行了。。。...
  3. spring中这些能升华代码的技巧,可能会让你爱不释手
  4. Method Swizzling的各种姿势
  5. 微软官方pe工具_小白用户如何制作系统启动版,微软出官方工具啦,简单一键制作...
  6. App自动化元素定位不到?别慌,3大工具帮你解决
  7. SSH与VMware的Linux虚拟机链接
  8. python post json数据_Python POST Json数据到Http
  9. 专业介绍Linux中的进程管理
  10. ucl计算机硕士选课,伦敦大学学院UCL这4个超酷的机器学习专业