码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 5835 Danganronpa 贪心+水题

时间:2016-08-16 01:50:50      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

题目链接: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;
}

 

hdu 5835 Danganronpa 贪心+水题

标签:

原文地址:http://www.cnblogs.com/dreamer-acm/p/5774845.html

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