hdu 1205 吃糖果(抽屉原理)

题意:N种糖果,不能把一样的放在一起吃,即第一次吃一种,下一次吃另一种。

思路:找到个数最多的糖果种类(最大的数目记作 ma,该糖果种类记为a),首先把这n个糖果放到n个抽屉里面,然后把剩余的N-1种糖果往抽屉里面放。因为n是最大的数目,即剩余的N-1种糖果的放置过程中,每一种糖果都可以分别放到不同的抽屉里,也就是说,不会出现一个抽屉里有相同的糖果。 只要保证最多有一个抽屉只有一个a糖果即可。也就是说除了a糖果外,剩下的糖果总数要 >=ma-1。(吃的时候就好说了,一个抽屉一个抽屉的吃就可以了,吃的时候保证当前抽屉吃的最后一个不要与下一个抽屉的第一个相同即可。)

于是也就得到满足条件的公式:sum-ma>=ma-1

其中sum为总和,ma为数目最多那种糖果数目,

代码:

 1 #include<iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4 
 5 int main(){
 6     int T,N,Mi,ma;
 7     __int64 sum;
 8     scanf("%d",&T);
 9     while(T--){
10         sum=0;
11         ma=0;
12         scanf("%d",&N);
13         while(N--){
14             scanf("%d",&Mi);
15             sum=sum+Mi;
16             if(Mi>ma)ma=Mi;
17         }
18         if(sum-ma>=ma-1)printf("Yes\n");
19         else printf("No\n");
20     }
21     return 0;
22 }
View Code

 

posted @ 2015-06-04 16:41  gongpixin  阅读(400)  评论(0编辑  收藏  举报