HDU 5835 Danganronpa

Problem Description
Chisa Yukizome works as a teacher in the school. She prepares many gifts, which consist of  n  kinds with  a[i]  quantities of each kind, for her students and wants to hold a class meeting. Because of the busy work, she gives her gifts to the monitor, Chiaki Nanami. Due to the strange design of the school, the students' desks are in a row. Chiaki Nanami wants to arrange gifts like this:

1. Each table will be prepared for a mysterious gift and an ordinary gift.

2. In order to reflect the Chisa Yukizome's generosity, the kinds of the ordinary gift on the adjacent table must be different.

3. There are no limits for the mysterious gift.

4. The gift must be placed continuously.

She wants to know how many students can get gifts in accordance with her idea at most (Suppose the number of students are infinite). As the most important people of her, you are easy to solve it, aren't you?
 

Input
The first line of input contains an integer  T(T10)  indicating the number of test cases.

Each case contains one integer  n . The next line contains  n   (1n10)  numbers:  a1,a2,...,an (1ai100000) .
 

Output
For each test case, output one line containing “Case #x: y” (without quotes) , where x is the test case number (starting from 1) and y is the answer of Chiaki Nanami's question.
 

Sample Input
  
1 2 3 2
 

Sample Output
  
Case #1: 2
 

Author
UESTC
 

Source

总结:)

这道题还是蛮有意思的,值得总结一下,做题嘛,首先就是要搞清楚题意,然后思考怎么解决这个问题,我们想,既然神秘礼物没有限制,那么我们就先不考虑他怎样配置了,先按照普通礼物的配置方法配置所有礼物,就是每一个礼物旁边都放上不一样的礼物,如礼物4种2 4 5 3个,那么我们就可以放成 2453,2453,453,45,5,通过司考不难发现放的座位最多为a[1]*n+(a[2]-a[1])*(n-1)+...+(a[n-1]-a[n-2])*2+1(这里的a[i]是按照数量从小到大排好序的),那么这个基本上就是我们答案的框架了,可以看出来这样摆放后已经是达到了普通礼物摆放规则的上限,如果生下来的礼物足够座位神秘礼物每个都放置一个,那么这样的方法就是答案,如果不够的话,那么答案也很明显,就是总数/2。
  通过这道题,发现对于一道题目来说我们寻求的是结局他的办法,以前有类似的相关的解法当然好,没有的话我们其实难以抽象的思考解决办法,不如把我们真正的带入到这个问题中,解决它,然后找到规律,毕竟只有自己先学会才能教会计算机不是么 敲打
//
//  main.cpp
//  Danganronpa
//
//  Created by 张嘉韬 on 16/8/22.
//  Copyright © 2016年 张嘉韬. All rights reserved.
//

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=10+10;
int a[maxn];
int main(int argc, const char * argv[]) {
    int T;
    scanf("%d",&T);
    for(int t=1;t<=T;t++)
    {
        int n,sum=0,temp=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){scanf("%d",&a[i]); sum+=a[i];}
        sort(a+1,a+n+1);
        for(int i=1;i<=n-1;i++) temp+=a[i];
        temp+=a[n-1]+1;
        printf("Case #%d: ",t);
        if(temp<=(sum/2)) printf("%d\n",temp);
        else printf("%d\n",sum/2);
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值