简单贪心-HDU 5835-Danganronpa

  • 简单贪心-HDU 5835-Danganronpa


  • 题目链接:

Danganronpa

  • 思路:

题目大意:

给你有n种礼物,第i种有ai个。现在要把这些礼物分给一排同学,要求每个人发普通礼物和神秘礼物各一个,要求相邻两人的普通礼物不能为同一种,神秘礼物没有限制,普通礼物和神秘礼物都从这n个礼物中选取。问最多能发给多少人。

题解:

为了让相邻的普通礼物不重合,除了数量最多的礼物外,其余礼物间隔放,用数量最多的礼物去插空

a.插空满,可以保证相邻普通礼物不同,把后排的礼物依次填上,最多有(Sum-MAX)*2 的人可以得到两件礼物,其实简单说就是把插空满的那一排,每张桌子再放一个数量最多的礼物,但此时,数量最多的礼物还可以作为普通礼物放在末尾一个,然后也把数量最多的礼物当成神秘礼物,最终有(Sum-MAX)*2+1。

如果此时数量最多的礼物不足以放满每张已经放有一个礼物的桌子,此时把落单的礼物往前放,最后有两个礼物的桌子一共有Sum/2 

b.插空不满,把落单的往前面插空完成的桌子上放礼物,最终是Sum/2

对于两种情况,取最小可能

  • 代码:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int T;
    cin>>T;
    int t=0;
    while(T--)
    {
        int n;
        int sum=0;
        int max_pre=-1;
        int pre;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>pre;
            sum+=pre;
            max_pre=max(max_pre,pre);
        }
        int T1=sum/2;
        int T2=(sum-max_pre)*2-1;
        cout<<"Case #"<<++t<<": "<<min(T1,T2)<<endl;
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值