結果
| 問題 | No.4 おもりと天秤 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2015-03-07 23:16:04 | 
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 15 ms / 5,000 ms | 
| コード長 | 717 bytes | 
| コンパイル時間 | 756 ms | 
| コンパイル使用メモリ | 67,944 KB | 
| 実行使用メモリ | 5,376 KB | 
| 最終ジャッジ日時 | 2024-06-26 09:08:30 | 
| 合計ジャッジ時間 | 1,780 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 23 | 
ソースコード
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int N;
int W[100];
bool input(istream& in)
{
	in >> N;
	for (int i = 0; i < N; i++) {
		in >> W[i];
	}
	return true;
}
const char *resolve()
{
	int sum = 0;
	for (int i = 0; i < N; i++) {
		sum += W[i];
	}
	if (sum % 2 == 0) {
		set<int> dp;
		dp.insert(0);
		for (int i = 0; i < N; i++) {
			set<int> dp_next;
			for (int d : dp) {
				dp_next.insert(d);
				int next = d + W[i];
				if (next == sum / 2) {
					return "possible";
				}
				if (next < sum / 2) {
					dp_next.insert(next);
				}
			}
			dp = dp_next;
		}
	}
	return "impossible";
}
int main(int argc, char **argv)
{
	input(cin);
	cout << resolve() << endl;
	return 0;
}
            
            
            
        