hdu 4393(优先队列)
来源:互联网 发布:视频放慢软件手机软件 编辑:程序博客网 时间:2024/06/02 03:55
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4393
思路:考虑Si最大只有100,所以我们可以建立优先队列数组s[1..100],对于每个优先队列,按第一关键字Fi第二关键字ID排序,每次取出所有的优先队列里最大值,然后直接 计算(Time-1)*Si + Fi 找最大的way,将对应的优先队列pop并输出对应ID即可。
View Code
1 #include<iostream> 2 #include<queue> 3 const int N=110; 4 using namespace std; 5 6 struct Point{ 7 int dis,id; 8 bool operator < (const Point &p) const { 9 if(dis!=p.dis)10 return dis<p.dis;11 return id>p.id;12 } 13 };14 priority_queue<Point>Q[N];15 16 int main(){17 int _case,t=1;18 scanf("%d",&_case);19 while(_case--){20 int n,f,s;21 scanf("%d",&n);22 for(int i=1;i<=n;i++){23 Point p;24 scanf("%d%d",&f,&s);25 p.dis=f;26 p.id=i;27 Q[s].push(p);28 }29 printf("Case #%d:\n",t++);30 for(int i=1;i<=n;i++){31 int max=-1,id=100000,ans;32 for(int j=1;j<=N;j++){33 if(!Q[j].empty()){34 Point p=Q[j].top();35 if((i-1)*j+p.dis>max||(i-1)*j+p.dis==max&&p.id<id){36 max=(i-1)*j+p.dis;37 id=p.id;38 ans=j;39 }40 }41 }42 int tmp=Q[ans].top().id;43 if(i==n){44 printf("%d\n",tmp);45 }else 46 printf("%d ",tmp);47 Q[ans].pop();48 }49 }50 return 0;51 }
0 0
- hdu 4393(优先队列)
- hdu 4393 优先队列
- hdu 4006 (优先队列)
- HDU Stones(优先队列)
- HDU 1026 (BFS + 优先队列)
- hdu 1236 排名(优先队列)
- hdu 1242Rescue(bfs+优先队列)
- hdu 1026(优先队列+BFS)
- hdu 1242 Rescue (优先队列+bfs)
- hdu 1026 (优先队列+bfs)
- HDU 1242 Rescue(BFS +优先队列)
- hdu 2850(贪心+优先队列)
- hdu 2822 Dogs(优先队列)
- hdu 1242 Rescue (优先队列)
- hdu 2822 Dogs(bfs+优先队列)
- HDU 1026 (BFS+优先队列)
- HDU 1242 (BFS+优先队列)
- HDU 1242 Rescue(BFS,优先队列)
- hdu 2191(多重背包)
- hdu 1114(完全背包)
- hdu 1024(滚动数组的学习)
- hdu 4022(map一对多)
- EVB框架
- hdu 4393(优先队列)
- hdu 1261(排列组合)
- dede首页调用顶级栏目单页内容(如公司简介)及名称和链接的方法
- hdu 1251+hdu 1671(字典树)
- hdu 1081(最大子矩阵)
- hdu 1559(最大子矩阵)
- hdu 3127(矩阵切割)
- Fleury(佛罗莱)算法求欧拉回路的学习
- hdu 2100(26进制)