結果
| 問題 |
No.4 おもりと天秤
|
| コンテスト | |
| ユーザー |
jp_ste
|
| 提出日時 | 2016-02-01 16:38:29 |
| 言語 | Java (openjdk 23) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,093 bytes |
| コンパイル時間 | 4,265 ms |
| コンパイル使用メモリ | 76,612 KB |
| 実行使用メモリ | 56,428 KB |
| 最終ジャッジ日時 | 2024-09-21 19:50:58 |
| 合計ジャッジ時間 | 12,301 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 18 TLE * 1 -- * 4 |
ソースコード
import java.util.Scanner;
public class Main {
static int N;
static int list[];
static boolean flag[];
static int target;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
N = scan.nextInt();
list = new int[N];
int sum = 0;
for(int i=0; i<N; i++) {
list[i] = scan.nextInt();
sum += list[i];
}
scan.close();
if(sum % 2 == 1) {
System.out.println("impossible");
} else {
target = sum / 2;
flag = new boolean[N];
while(true) {
if( solve(0, 0) ) {
boolean savedFlag[] = flag.clone();
if(solve(0, 0)) {
System.out.println("possible");
break;
} else {
flag = savedFlag;
}
} else {
System.out.println("impossible");
break;
}
}
}
}
static boolean solve(int now, int firstI) {
if(now > target) return false;
if(now == target) {
return true;
}
boolean find = false;
for(int i=firstI; i<N; i++) {
if(!flag[i]) {
flag[i] = true;
find = solve(now+list[i], i+1);
if(find) break;
flag[i] = false;
}
}
return find;
}
}
jp_ste