提出 #4748171
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAX_N = 8;
int N, A, B, C;
int l[MAX_N] = {};
const int INF = pow(10, 9);
int dfs(int num, int a, int b, int c) {
// 使った本数が与えられた本数に達した時.
if (num == N) {
int abc[] = {a, b, c};
int tmp = abs(A - a) + abs(B - b) + abs(C - c) - 30;
return (*min_element(abc, abc + 3) > 0) ? tmp : INF;
}
int ret[4];
// 合成魔法を使わない(延長,縮小魔法のみの場合など?)
ret[0] = dfs(num + 1, a, b, c);
// それぞれに合成魔法使う
ret[1] = dfs(num + 1, a + l[num], b, c) + 10;
ret[2] = dfs(num + 1, a, b + l[num], c) + 10;
ret[3] = dfs(num + 1, a, b, c + l[num]) + 10;
return *min_element(ret, ret + 4);
}
int main() {
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
cin >> N >> A >> B >> C;
for (int i = 0; i < N; i++) {
cin >> l[i];
}
cout << dfs(0, 0, 0, 0) << "\n";
return 0;
}
提出情報
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
300 / 300 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
a01, a02, a03 |
| All |
a01, a02, a03, b04, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20 |
| ケース名 |
結果 |
実行時間 |
メモリ |
| a01 |
AC |
1 ms |
256 KiB |
| a02 |
AC |
2 ms |
256 KiB |
| a03 |
AC |
2 ms |
256 KiB |
| b04 |
AC |
1 ms |
256 KiB |
| b05 |
AC |
2 ms |
256 KiB |
| b06 |
AC |
1 ms |
256 KiB |
| b07 |
AC |
1 ms |
256 KiB |
| b08 |
AC |
1 ms |
256 KiB |
| b09 |
AC |
2 ms |
256 KiB |
| b10 |
AC |
2 ms |
256 KiB |
| b11 |
AC |
2 ms |
256 KiB |
| b12 |
AC |
2 ms |
256 KiB |
| b13 |
AC |
2 ms |
256 KiB |
| b14 |
AC |
2 ms |
256 KiB |
| b15 |
AC |
2 ms |
256 KiB |
| b16 |
AC |
2 ms |
256 KiB |
| b17 |
AC |
2 ms |
256 KiB |
| b18 |
AC |
2 ms |
256 KiB |
| b19 |
AC |
2 ms |
256 KiB |
| b20 |
AC |
2 ms |
256 KiB |