Analyse:
假设有四种糖果,6A 3B 2C 1D,首先想到的是先把最多的糖果都分隔开,A?A?A?A?A?A,3个B和2个C恰好能放满那五个空位,剩下的1个D就随便放了。其实,"?"区域,即最大数目的糖果之间的空隙(max-1),只要有其他糖果填上,剩下的多余糖果都一定可以放好位置(即使每个空隙只放一个同种类的糖果,总有足够的空隙放糖果),因为A与A已经把它们分隔了。
因此,问题本质就是排除最多数目的糖果(若这样的糖果不止一种,只排除其中任意一种),其余的糖果的总数sum加1不少于最多的糖果数就Yes。
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int N,T;
__int64 sum,max,t;
scanf("%d",&N);
while(N--)
{
sum=max=0;
scanf("%d",&T);
while(T--){
scanf("%I64d",&t);
sum+=t;
if(max<t)max=t;
}
if(sum>=2*max)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}