HDU - 1205 吃糖果(鸽巢原理)
题目如下:

方法:隔板法求解
找出数量最多的一种糖果,把数量n看成n个隔板,隔成n个空间(隔板以右为一空间),其他糖果数量总和记为数值s。
(1)若s<n-1,把s个糖果放到隔板之间,n个隔板不够放,至少一个空间内没有糖果,因为两个隔板为同一种糖果,不符合题意,无解。
(2)若s>=n-1,有解。
推导之后发现:当总数-最大值>=最大值-1时,就满足有解条件。
注意事项:
(1)用数组存放时,数组要开大,n<=1000000,数组要a[1000000];
(2)把t,n等变量定义成long long类型(int类型的话为WA)。
AC代码:
1 #include<stdio.h> 2 int main() 3 { 4 long long t,n,sum,max; 5 int a[1000000]; 6 scanf("%lld",&t); 7 while(t--){ 8 scanf("%lld",&n); 9 sum=0,max=0; 10 for(int j=0;j<n;j++){ 11 scanf("%d",&a[j]); 12 sum+=a[j]; 13 max=max<a[j]?a[j]:max; 14 } 15 if((sum-max)>=(max-1)){ 16 printf("Yes\n"); 17 } 18 else{ 19 printf("No\n"); 20 } 21 } 22 return 0; 23 }

浙公网安备 33010602011771号