传送门

•参考资料

  [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. java 操作CLOB类型数据

    clob类型,但对于这个类型处理起来还是比较麻烦的,varchar2长度为4000bytes,如果varchar2能满足楼主的需求,建议使用varchar2,下面提供了在Java 中读取clob类型的 ...

  2. oracle-Dbca数据库模板

    数据库模板是用xml文件格式保存在本地磁盘上的数据库配置的定义. Dbca能够使用两种类型的模板:种子模板和非种子模板. 种子模板指含有定义信息和实际的数据文件与重做日志文件的模板定义. 种子模板的优 ...

  3. POJ1190 洛谷P1731 NOI1999 生日蛋糕

    生日蛋糕(蛋糕是谁?) Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20272   Accepted: 7219 Desc ...

  4. awss3

    import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io ...

  5. Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离

    给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值. 示例: 输入: root = [4,2,6,1,3,null,null] 输出: 1 解释: 注意,root是树结点对象(Tr ...

  6. Arthas用法

    简介 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的? 为什么会报各种类相关的 ...

  7. mybatis多排序问题

    在很多业务场景中,会有多排序问题,mybatis支持多排序,写法如下: ORDER BY contract.contractCount DESC, reward.rewardTotal DESC, n ...

  8. 阿里大数据产品Dataphin上线公共云,将助力更多企业构建数据中台

    日前,由阿里数据打造的智能数据构建与管理Dataphin,重磅上线阿里云-公共云,开启智能研发版本的公共云公测!在此之前,Dataphin以独立部署方式输出并服务线下客户,已助力多家大型客户高效自动化 ...

  9. @atcoder - AGC036E@ ABC String

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个仅由 A, B, C 组成的字符串 S. 求 S 的一个 ...

  10. python环境测试MySQLdb、DBUtil、sqlobject性能

    python环境测试MySQLdb.DBUtil.sqlobject性能 首先介绍下MySQLdb.DBUtil.sqlobject: (1)MySQLdb 是用于Python连接Mysql数据库的接 ...