HDU ACM 1205 食糖果
HDU ACM 1205 吃糖果
解析:
1、首先假设两种糖果,其中一种数量最大为n,要想这两种糖果交替吃完,另一种糖果最少应为n-1;n个糖果排成一排,内部共有n-1个空,分离相邻的两个相同的糖果。题中,找出某种糖果的最大数量max,则至少需要max-1个糖果(即除去最大数量剩下的总和)去填充空隙。若剩下糖果数大于max也是可以的,我们可以想成把数量较少的糖果用来“加厚”原来的空隙(即再把他们填到最大数量糖果的空隙中,可以两个或两个以上不同的糖果去填充同一个空隙)。因此需满足sum-max>=max-1;即sum-max+1>=max。即剩余的糖果总数要比max-1多或等于。
#include<iostream> using namespace std; int main() { __int64 sum,max; int i,T,n,m; scanf("%d",&T); while(T--) { scanf("%d",&n); sum=0; max=-1; for(i=0;i<n;i++) { scanf("%d",&m); sum+=m; if(max<m) max=m; } if(sum-max+1>=max) puts("Yes"); else puts("No"); } return 0; }