神とジェンガのシールドを改善するための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]);
}
}
}