結果
問題 | No.107 モンスター |
ユーザー | takenkotake |
提出日時 | 2024-06-30 00:41:34 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 5 ms / 5,000 ms |
コード長 | 1,081 bytes |
コンパイル時間 | 1,941 ms |
コンパイル使用メモリ | 201,976 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-30 00:41:39 |
合計ジャッジ時間 | 2,767 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,816 KB |
testcase_01 | AC | 2 ms
6,944 KB |
testcase_02 | AC | 2 ms
6,944 KB |
testcase_03 | AC | 2 ms
6,940 KB |
testcase_04 | AC | 2 ms
6,940 KB |
testcase_05 | AC | 2 ms
6,944 KB |
testcase_06 | AC | 2 ms
6,940 KB |
testcase_07 | AC | 2 ms
6,944 KB |
testcase_08 | AC | 2 ms
6,940 KB |
testcase_09 | AC | 2 ms
6,944 KB |
testcase_10 | AC | 2 ms
6,944 KB |
testcase_11 | AC | 2 ms
6,944 KB |
testcase_12 | AC | 2 ms
6,940 KB |
testcase_13 | AC | 3 ms
6,940 KB |
testcase_14 | AC | 4 ms
6,944 KB |
testcase_15 | AC | 4 ms
6,940 KB |
testcase_16 | AC | 2 ms
6,940 KB |
testcase_17 | AC | 2 ms
6,940 KB |
testcase_18 | AC | 3 ms
6,940 KB |
testcase_19 | AC | 2 ms
6,944 KB |
testcase_20 | AC | 3 ms
6,940 KB |
testcase_21 | AC | 3 ms
6,944 KB |
testcase_22 | AC | 4 ms
6,940 KB |
testcase_23 | AC | 5 ms
6,944 KB |
testcase_24 | AC | 3 ms
6,940 KB |
ソースコード
#include<bits/stdc++.h> using namespace std; int D[21]; int dp[1<<21]; int main(void){ long long n; cin >> n; for(int i=0;i<n;i++){ cin >> D[i]; } dp[0]=100;//初期値100 // 1は選択済み。0はこれから for(int msk=0; msk<(1<<n); msk++){ int total = 100; if(dp[msk]==0) continue;//体力0なので終了。このmsk条件ではこれ以上動けない for(int i=0;i<n;i++){ if((msk & (1<<i))&&D[i]<0) total += 100;//レベルが1上がると最大体力が100上がる } for(int j=0; j<n; j++){ if(!(msk & (1<<j))){//まだ選択してないモンスター int status; if(0<D[j]){ status = min(dp[msk]+D[j],total);//Dが正の数なので回復(最大値はtotal) }else{ status = max(dp[msk]+D[j],0);//Dが負の数なので体力使う(最小値は0) } dp[msk+(1<<j)]= max(dp[msk+(1<<j)],status);//体力多い条件を残す } } } cout << dp[(1<<n)-1] << endl; return 0; }