标签:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5835
【题意】有n种礼物,每个有ai个,现在开始给每个人发礼物,每人一个普通礼物和神秘礼物,相邻两人的普通礼物必须不同,每个礼物都可以作为神秘礼物/普通礼物,问最多可以发给多少人。
【解题思路】
答案肯定是小于等于sum/2,因为每个小朋友得有2礼物。然而数据太水,sum/2也过了。
我们先考虑平凡的礼物,因为平凡的礼物相邻桌子上不能相同,故先把数量最多的礼物相邻的交替用作平凡的礼物。
如果n=3,(100,2,2) 平凡的礼物如此分:ABABACACA,神秘礼物均为A,这样结果是9.
如果n=3,(3,2,2) 数量最多的礼物不够交替分,结果为sum/2,即3.
我们发现ans=min(sum/2,(sum-a[n-1]*2+1);
代码如下:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int a[10],n; int main() { int t; scanf("%d",&t); for(int k=1;k<=t;k++) { int sum=0,ans; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } sort(a,a+n); ans=sum/2; ans=min(ans,(sum-a[n-1])*2+1); printf("Case #%d: %d\n",k,ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/dreamer-acm/p/5774845.html