nyoj 糖果(策略选择)

找出糖果中数量最大的一种,设其数量为max,然后让其他的所有来往中间插,只有当剩余的糖果数大于等于max-1时才能满足要求

糖果
时间限制:1000 ms  |  内存限制:65535 KB
难度:2

描述
    topcoder工作室的PIAOYIi超级爱吃糖果,现在他拥有一大堆不同种类的糖果,他准备一口气把它们吃完,可是他有一个习惯,他不喜欢同一种类的糖果连着吃,他喜欢先吃一种,然后再吃另一种。可是PIAOYI不知道是否存在一种顺序能把这些糖果吃完,聪明的你可以帮助他吗?

输入
    第一行有一个整数N,接下来有N组数据,第一行有一个整数M(0<M<1000000),第二行是M个数,表示M种糖果的数目Mi(0<Mi<1000000).
输出
    对于每组数据,输出一行,包含一个“Yes”或者“No”。
样例输入

    2
    3
    1 1 5
    5
    1 2 3 4 5


 
import java.util.Arrays;
import java.util.Scanner;
public class Main {
	
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int cases=scanner.nextInt();
		while(cases--!=0)
		{
			int number=scanner.nextInt();
			int result[]=new int[number];
			int sum=0,max=0;
			for(int i=0;i<number;i++)
			{
				result[i]=scanner.nextInt();
				sum+=result[i];
				if(max<result[i])
					max=result[i];
			}
			if(max-1>sum-max)
				System.out.println("No");
			else {
				System.out.println("Yes");
			}
		    /*Arrays.sort(result);
		    int sum=0;
		    for(int j=0;j<number-1;j++)
		    {
		    	sum+=result[j];
		    }
		    if(result[number-1]-1>sum)
		    	System.out.println("No");
		    else {
				System.out.println("Yes");
			}*/
		}
	}
}
                        

另外一种写法

 
import java.util.Arrays;
import java.util.Scanner;
public class Main {
	
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int cases=scanner.nextInt();
		while(cases--!=0)
		{
			int number=scanner.nextInt();
			int result[]=new int[number];
			for(int i=0;i<number;i++)
			{
				result[i]=scanner.nextInt();
			}
		    Arrays.sort(result);
		    int sum=0;
		    for(int j=0;j<number-1;j++)
		    {
		    	sum+=result[j];
		    }
		    if(result[number-1]-1>sum)
		    	System.out.println("No");
		    else {
				System.out.println("Yes");
			}
		}
	}
}
                        


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值