码迷,mamicode.com
首页 > 编程语言 > 详细

hdu 4040 (贪心算法)

时间:2015-01-01 00:04:05      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

这题是我们学校比赛的题目,因为当时参加精英组比赛,除了3个大二的其他都是大三大四的大神,就抱着打酱油的心态去了,结果真的打酱油了;

事后看看题目,确实有些题目以当前水平是可以做出来的,原因应该是 心态 以及 时间分配上的问题.

这题一直卡在题目什么意思上,还有一题 求前K大数的,那题最后想到用堆,但是不会写- -,忘了优先队列这个东西.所以很遗憾啊..

总而言之就是会的东西太少了哈...还需要好好加油;

这题的意思就是说每个细胞每秒只能产生一个噬菌体,无论这个细胞里面有多少噬菌体,然后攒齐一定数量的噬菌体就可以再花费一定的时间感染一个细胞..

很显然,最先找耗时最大的细胞感染,此时能产生的噬菌体总数最多,即可以在相同时间内感染最多的细胞.即采用贪心算法;

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 #define maxn 100005
 5  int max(int a,int b)
 6 {
 7     return a>b?a:b;
 8 }
 9 int n,T;
10 struct node
11 {
12     int     d,t;
13 }game[maxn];
14 int cmp(node &a,node &b)
15 {
16     return a.t>b.t;
17 }
18 int main()
19 {
20     int cnt,i,j,ans,temp;
21     scanf("%d",&T);
22     cnt=1;
23     while(T--){
24         scanf("%d",&n);
25         for(i=0;i<n;i++)
26             scanf("%d%d",&game[i].d,&game[i].t);
27         sort(game,game+n,cmp);
28         ans=game[0].d+game[0].t;
29         temp=game[0].d;
30         for(int i=1;i<n;i++){  
31             ans=max(ans,temp+game[i].d+game[i].t); //产生尽量多的噬菌体;,即判断是否需要额外花费感染某个细胞;.
32             temp+=game[i].d; // 增加需要生产感染所需的噬菌体的时间;
33         }  
34         printf("Case %d: %d\n",cnt++,ans);
35     }
36     return 0;
37 }

 

hdu 4040 (贪心算法)

标签:

原文地址:http://www.cnblogs.com/xiaoniuniu/p/4196828.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!