首页 > 代码库 > hdu 4040 (贪心算法)
hdu 4040 (贪心算法)
这题是我们学校比赛的题目,因为当时参加精英组比赛,除了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 node11 {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 (贪心算法)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。