现在的位置: 首页 > 综合 > 正文

nyoj 糖果(策略选择)

2018年04月25日 ⁄ 综合 ⁄ 共 1388字 ⁄ 字号 评论关闭

找出糖果中数量最大的一种,设其数量为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");
			}
		}
	}
}
                        

抱歉!评论已关闭.