神とジェンガのシールドを改善するためのJAVAブルーブリッジカップアルゴリズム

神とジェンガのシールドを改善するためのJAVAブルーブリッジカップアルゴリズム

資源制約の
制限時間:256.0メガバイト:メモリ制限を1.0秒

問題の説明
  -神tiandun最近のmは行くプレーする子供たちに同行するために保育園に行って
  、彼らそれぞれが、彼らが望むものを綴るために、ブロックの異なる数を必要とし、すべての児童は、数ブロックを得ました。しかし、いくつかの子供たちは多くを取得し、そのうちのいくつかはあまりかかり、いくつかの子供たちは、彼の傑作を完了するために、ブロックを構築し、他の子供を取得する必要があります。子供が自分の仕事を終えた場合、彼は彼の仕事のダウンを入れて、無私無欲彼のブロックのすべてを捧げているだろう。彼は彼の仕事を完了していない場合しかし、彼はブロックはさせませんよ〜うち
  の子供たちの、このような調和を参照するには、神の盾誰もが彼らは自分の仕事を完了助けたかったので、とても満足しています。盾神は今考えて、この理想的には、それはそれを達成することは可能でしょうか?私はこの質問を置くように、彼のほとんどはあなたを信頼できます。

入力フォーマット
  最初の番号mを作用します。
  次に、データのM個のセットが存在します。各グループの最初の行は、N、N-子が存在し、この日語りました。各列N行の次の二つの数字は、それぞれのビルディングブロックを表し、彼は現在、彼が必要とするブロックの総数を有します。

出力フォーマット
  出力ラインm、もしすべての作業が正常に完了するi日、出力YES、それ以外の出力はできません。

サンプル入力
2
2
2 2
。1. 3
。3
。1. 5
。3. 3
0 4

サンプル出力
YES
NO

データサイズと表記
  1 <= N <= 10000,1 < = M <= 10。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sca=new Scanner(System.in);
		int n=sca.nextInt();
		String[] str=new String[n];
		for(int i=0;i<n;i++) {
			int m=sca.nextInt();
			int sum=0;
			int[] a=new int[m];  //存储拥有的积木数量
			int[] b=new int[m];  //存储需要的积木数量
			for(int j=0;j<m;j++) {
				int x=sca.nextInt();
				int y=sca.nextInt();
				if(x+sum>=y) {    //满足需求,总积木加上拥有积木数量
					sum+=x;
					a[j]=0;
				}else {
					a[j]=x;
					b[j]=y;
				}
			}
			int temp=0;
			while(temp!=sum) {    //循环,直到给积木也完不成时,总积木没有变化时退出循环
				temp=sum;
				for(int j=0;j<m;j++) {
					if(a[j]==0) {
						continue;
					}
					if(a[j]+sum>=b[j]) {
						sum+=a[j];
						a[j]=0;
					}
				}
			}
			boolean bo=true;
			for(int j=0;j<m;j++) {  //判断有没有小朋友积木不够
				if(a[j]!=0) {
					bo=false;
					break;
				}
			}
			if(bo) {
				str[i]="YES";
			}else {
				str[i]="NO";
			}
		}
		for(int i=0;i<n;i++) {
			System.out.println(str[i]);
		}
	}
	
}

发布了17 篇原创文章 · 获赞 0 · 访问量 371

おすすめ

転載: blog.csdn.net/qq_36551453/article/details/104470825