http://acm.hdu.edu.cn/showproblem.php?pid=1205
max为最大堆数量,s为总数。
保证max-(s-max)=2*max-s<=1即可,因为只要能保证最大堆数量和其他堆数量差在一个以内,就可以做到别的堆拿一个最大堆拿一个(剩下yy)这种操作。
View Code
#include <stdio.h> int a[1100000]; int main() { int t,n; int i; __int64 s; int max; scanf("%d",&t); while(t--) { s=max=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",a+i); if(max<a[i])max=a[i]; s+=a[i]; } printf(2*max-s<=1?"Yes\n":"No\n"); } return 0; }