結果
| 問題 |
No.4 おもりと天秤
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-04-26 02:55:33 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,217 bytes |
| コンパイル時間 | 437 ms |
| コンパイル使用メモリ | 56,224 KB |
| 実行使用メモリ | 814,848 KB |
| 最終ジャッジ日時 | 2024-09-13 11:43:40 |
| 合計ジャッジ時間 | 3,322 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 2 MLE * 1 -- * 20 |
ソースコード
#include <iostream>
int assess(int n, int a[], int sum, int N) //n個で合計sumを実現できるか
{
int W[N];
for(int i = 0; i < N; i ++)
{
W[i] = a[i];
}
int ret = 0;
int result = sum;
if(n == 1)
{
for(int i = 0; i < N; i ++)
{
if(W[i] == sum)
{
ret = 1;
break;
}
}
}
else
{
for(int k = 0; k < (N - n); k ++)
{
int W_fix[N - k - 1];
result = sum - W[k];
for(int i = k; i < N - 1; i ++)
{
W_fix[i - k] = W[i + 1];
int value = assess(n - 1, W_fix, result, N - k - 1);
if(value == 1)
{
ret = 1;
goto OUT;
}
}
}
}
OUT:
if(ret == 0)
{
return 0;
}
else
{
return 1;
}
}
int main(void)
{
int N;
std::cin >> N;
int W[N];
int sum = 0;
for(int i = 0; i < N; i ++)
{
std::cin >> W[i];
sum += W[i];
}
if(sum % 2 == 1)
{
std::cout << "impossible" << std::endl;
}
else
{
for(int i = 0; i < 1 + (N / 2); i ++) //i個のおもりを使う組み合わせ 1個からN/2個まで。
{
int sum2 = sum / 2;
int value = assess(i, W, sum2, N);
if(value == 1)
{
std::cout << "possible" << std::endl;
break;
}
}
}
return 0;
}