HDU 3573 Buy Sticks 贪心--利用率

来源:互联网 发布:profile直播软件 编辑:程序博客网 时间:2024/06/17 22:21

题意:有20,28,32cm长的棒子,是我需要的,现在商店只有75cm长的棒子,现在要把75cm的棒子截成那三个长度的棒子(不能拼凑,不能用10cm+10cm=20cm类似),问你至少需要多少棒子。


思路:我又是被利用率的贪心给虐了。这下要长一点记性了,来看这题。

首先,我当然我希望75cm的棒子剩下的废料越少越好,那么最好的组合当然是3个短的棒子,其中rate最高的是top1:20 20 32,其次top2:20 20 28,最差top3:20 20 20。这样看来,首先考虑这三种情况,那么剩下来的棒子只能组成2个短棒子的情况了,那就是剩余的短棒子的个数,除以2,那么我们可以想到,如果要是有奇数个短棒子剩余那么久还需要一个长棒子,所以答案是向上取整数,所以(短棒子数+1)/2。

//利用率 #include<iostream>#include<cstring>#include<cstdio>using namespace std;int n20,n28,n32;int a[100+5];void Input(){scanf("%d%d%d",&n20,&n28,&n32);}int MIN(int a,int b){if(a<b) return a;return b;}void treatment(int ca){int sum=0,t;t=MIN(n20/2,n32);sum+=t;n20-=2*t;n32-=t;t=MIN(n20/2,n28);sum+=t;n20-=2*t;n28-=t;t=n20/3;sum+=t;n20-=3*t;sum+=(n20+n28+n32+1)/2;printf("Case %d: %d\n",ca,sum);}int main(){int t,ca=1;scanf("%d",&t);while(t--){Input();treatment(ca++);}return 0;} 

0 0
原创粉丝点击