Physical Examination
来源:互联网 发布:java中try catch怎么用 编辑:程序博客网 时间:2024/06/05 02:47
题目描述:排队,每次选择最优的队伍使得最后所花时间最短。
输入a,b:a表示如果当前马上来排队的话,所需的等待时间;b表示此后每晚来一分钟所带来的等待代价。例如,对第i队来说,现在要去排的话,再过a分钟就到你了。如果先去了别的队伍,过x分钟后再回来这个队伍排的话,需要再等待a+x*b分钟才到你。
题目要求找出最优的排队方案(所有的队都排完),输出最短的总时间。
算法分析:加入有a1,a2两个队伍,如果先选a1,则排完1队再去2队,总共时间为:a1+a1*b2+a2;
(a1*b1表示花了a1个时间完成1队后,在2队增加的排队时间)。
同理,如果先选2对,时间为:a2+a2*b1+a1;
比较两种方案,时间差别只在于a1*b1与a2*b1,所以根据贪心算法,只要比较这两个的大小即可得出最优方案。如果a1*b1>a2*b1,则先去排1队。
AC代码:
#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;const int M = 31536000;struct Node{ long long a,b; }s[100002]; bool cmp(Node s1,Node s2){ return s1.a*s2.b < s2.a*s1.b;}int main(){ int num; while(scanf("%d",&num),num) { for(int i=0;i<num;i++) scanf("%d%d",&s[i].a,&s[i].b); sort(s,s+num,cmp); long long ans=0; for(int j=0;j<num;j++) { int t = (s[j].a%M+s[j].b*ans%M)%M; ans = (ans+t)%M; } printf("%lld\n",ans); } return 0;}
- Physical Examination
- Physical Examination
- physical examination
- hdu 4442 Physical Examination
- HDU-Physical Examination
- HDU 4442 Physical Examination
- hdu 4442 Physical Examination
- hdu 4442 Physical Examination
- hdu - 4442 - Physical Examination
- hdu4442-Physical Examination
- HDU 4442 Physical Examination
- hdu 4442 Physical Examination
- hdu 4442 Physical Examination
- HDU 4442 Physical Examination
- hdu 4442 Physical Examination
- hdu 4442 Physical Examination
- hdu 4442 Physical Examination
- hdu 4442 Physical Examination (排序)
- ios面试题收集一(附基本答案)
- android 开发之音乐播放器代码
- mysql语句可以这样写
- PAT (Basic Level) Practise (中文)—— 1005. 继续(3n+1)猜想
- [ Libgdx 学习笔记 ] - Action 动作类与 Actions(管理类,动作池) [待更新]
- Physical Examination
- html_a标签中调用js函数的方法
- JAVA LinkedList运用
- 计算机32个算法
- 点击页面,UINavigationController导航栏的隐藏和显示
- VC 仿QQ窗口靠边自动收缩隐藏效果
- Cocos2dx 之 cocosbuilder的使用
- boa cgi实现ajax
- JavaScript中创建对象的3种方式