传送门

•参考资料

  [1]:2019CCPC网络选拔赛 H.Fishing Master(思维+贪心)

•题意

  池塘里有 n 条鱼,捕捉一条鱼需要花费固定的 k 时间;

  你有一个锅,每次只能煮一条鱼,其中煮熟第 i 条鱼至少需要 ti 时间;

  你在煮鱼的时候可以选择去钓一条鱼,也可也选择不钓;

  但是,一旦你决定钓鱼,就必须花费 k 时间调到一条鱼;

  任何时刻,你都可以有多条鱼待煮;

  问将所有的鱼钓上来并煮熟所有的鱼最少需要多少时间;

•题解

  理想的方案是只有在钓第一条鱼的时候锅是空的,其余任意时刻,锅都在做有用功;

  锅在做有用功指的是第 i 条鱼在锅中煮的前 ti 时间,多煮的时间称锅在做无用功;

  这种情况下,只需要且必须花费 $k+\sum_{i=1}^{n}t_i$ 时间就可以将所有鱼全部钓上来并全部煮好;

  那么,实际情况并非如此,要想花费最少的时间,首先得明确在什么情况下可能会导致时间浪费;

  假设你当前煮的鱼需要花费 t 时间,钓鱼需要花费 k 时间;

  你可以在这 t 时间内钓 $\frac{t}{k}$ 条鱼上来,在钓鱼的时间,锅处于煮鱼状态;

  但是剩下的 t%k 时间不足以再钓一条上来;

  此时,你就有两个决策可以选择:

    决策1:去钓下一条鱼;

    决策2:等待 t%k 时间往锅中放入下一条鱼;

  当然,选择 决策2 的前题是你得有鱼可煮;

  如果你手中有鱼的话,肯定要选择 决策2,因为等待的这 t%k 时间是必须的;

  而如果选择 决策1,那么煮当前这条鱼会花费 t+k-t%k 时间,前 t 时间锅在做有用功,是必须的;

  但是后 k-t%k 时间,锅就在做无用功,是在浪费时间;

  如果你当前手中无鱼,那么你不得不去钓鱼,那么就一定要浪费当前的 k-t%k 时间么?

  假设你现在已经煮了 i 条鱼(包括当前煮的这条鱼);

  那么,你完全可以在前 i 条鱼中找个 tj%k($j \in [1,i]$)大的从而使得浪费的 k-tj%k 时间尽可能的小;

  找 tj%k 大的就可以使用优先级队列了;

  那么,接下来就要分析一下优先钓哪条鱼了;

  当然是优先钓煮的时间较长的鱼了,因为在煮这条鱼的时候,你会尽可能多的钓上来其他的鱼,从尽可能多的选择决策2;

•Code

 #include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e5+; int n,k;
int t[maxn];
priority_queue<int >q; bool cmp(int a,int b)
{
return a > b;
}
ll Solve()
{
while(!q.empty())
q.pop(); /**
花费k时间钓上来第一条鱼
*/
ll ans=k;
ll cnt=;
sort(t+,t+n+,cmp); for(int i=;i <= n;++i)
{
ans += t[i];///煮第i条鱼
cnt += t[i]/k;///再煮的时间可以额外钓t[i]/k条 if(cnt < i)///如果在煮第i条鱼的时候并没有将第i条鱼钓上来
{
ans += k-q.top();///选择在t%k最大的那条鱼后钓第i条鱼
q.pop();
}
q.push(t[i]%k);
}
return ans;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
for(int i=;i <= n;++i)
scanf("%d",t+i); printf("%lld\n",Solve());
}
return ;
}

HDU 6709“Fishing Master”(贪心+优先级队列)的更多相关文章

  1. HDU 6438"Buy and Resell"(贪心+优先级队列)

    传送门 •参考资料 [1]:HDU6438(优先队列+思维) •题意 有n个城市,第 i 天你会达到第 i 个城市: 在第 i 个城市中,你可以用 ai 元购买一个物品,或者用 ai 元卖掉一个物品, ...

  2. The 10th Shandong Provincial Collegiate Programming Contest H.Tokens on the Segments(贪心+优先级队列 or 贪心+暴力)

    传送门 •题意 二维平面上有 n 条线段,每条线段坐标为 $(l_i,i),(r_i,i)$: 平面上的每个整点坐标上都可以放置一枚硬币,但是要求任意两枚硬币的横坐标不相同: 问最多有多少条线段可以放 ...

  3. POJ 3253 Fence Repair 贪心 优先级队列

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 77001   Accepted: 25185 De ...

  4. POJ 2431 Expedition 贪心 优先级队列

    Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30702   Accepted: 8457 Descr ...

  5. 【Fishing Master HDU - 6709 】【贪心】

    题意分析 题意:题目给出n条鱼,以及捕一条鱼所用的时间k,并给出煮每一条鱼的时间,问抓完并煮完所有鱼的最短时间. 附题目链接 思路: 1.捕第一条鱼的时间是不可避免的,煮每条鱼的时间也是不可避免的,这 ...

  6. hdu 1873 看病要排队(优先级队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873 题目大意: 三个医生看病,病人排队看病,病人有优先级,优先级高的提前看病,同样的优先级按先后.I ...

  7. HDU 6047 Maximum Sequence (贪心+单调队列)

    题意:给定一个序列,让你构造出一个序列,满足条件,且最大.条件是 选取一个ai <= max{a[b[j], j]-j} 析:贪心,贪心策略就是先尽量产生大的,所以就是对于B序列尽量从头开始,由 ...

  8. 【POJ 3614 Sunscreen】贪心 优先级队列

    题目链接:http://poj.org/problem?id=3614 题意:C头牛去晒太阳,每头牛有自己所限定的spf安全范围[min, max]:有L瓶防晒液,每瓶有自己的spf值和容量(能供几头 ...

  9. [贪心,dp] 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 Fishing Master (Problem - 6709)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6709 Fishing Master Time Limit: 2000/1000 MS (Java/Othe ...

随机推荐

  1. DOM事件机制

    前言 本文主要介绍DOM事件级别.DOM事件模型.事件流.事件代理和Event对象常见的应用,希望对你们有些帮助和启发! 本文首发地址为GitHub博客,写文章不易,请多多支持与关注! 一.DOM事件 ...

  2. java 2类与对象[学堂在线]

    java的面向对象方法和特征(略) 累的声明格式 语法:先定义一个引用变量名 穿件对象 new aclock=new CLock() 没有ststaic 就是实例变量 类变量static 类变量 方法 ...

  3. 洛谷 P1858 多人背包 DP

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 洛谷 P1858 多人背包 题目描述 求01背包前k优解的价值 ...

  4. ELK学习之jdk和jre的区别

    JRE: Java Runtime EnvironmentJDK:Java Development KitJRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库.是使用java语言 ...

  5. docker push dial tcp *.*.*.*:443 getsockopt: connection refused

    docker 在提交镜像的时候出现以下错误. 我用的是本地的仓库,所以tcp后面是我的ip地址. 错误信息: #docker push ubuntu docker push  dial tcp 192 ...

  6. Android Binder简介

    Android使用Linux的进程管理机制,以进程为单位分配虚拟地址空间.为了安全考虑,Android的不同进程之间是相互隔离的(进程之间被禁止直接交互).如果进程间需要通信,必须通过Android的 ...

  7. LRM-00109: could not open parameter file '/u01/app/oracle/product/12.1.0/db_1/dbs/initepps.ora'

    安装好oracle后,起动时报如下错误: [oracle@Oracle-A ~]$ export ORACLE_SID=ORCL [oracle@Oracle-A ~]$ sqlplus / as s ...

  8. 2019-4-10-VisualStudio-2019-尝试使用-C#-8.0-新的方式

    title author date CreateTime categories VisualStudio 2019 尝试使用 C# 8.0 新的方式 lindexi 2019-04-10 10:41: ...

  9. 当better-scroll遇见了react擦出的火花

    关于better-scroll这个插件前面已经介绍过两次了 从原生js使用到结合服务端发送数据使用都有过介绍 今天给大家分享一下这款插件在react中遇见的坑  总之我真是对这款插件又爱又恨 每次各种 ...

  10. How do I cover the “no results” text in UISearchDisplayController's searchResultTableView?

    How do I cover the "no results" text in UISearchDisplayController's searchResultTableView? ...