結果
| 問題 |
No.107 モンスター
|
| コンテスト | |
| ユーザー |
srjywrdnprkt
|
| 提出日時 | 2022-12-22 13:06:17 |
| 言語 | C++17(clang) (17.0.6 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 30 ms / 5,000 ms |
| コード長 | 1,028 bytes |
| コンパイル時間 | 1,281 ms |
| コンパイル使用メモリ | 144,744 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-11-18 03:20:11 |
| 合計ジャッジ時間 | 2,142 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 21 |
ソースコード
#include <iostream>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <iomanip>
#include <queue>
#include <algorithm>
#include <numeric>
#include <deque>
#include <complex>
using namespace std;
int main(){
long long N, mx, cnt;
cin >> N;
mx = 1LL<<N;
vector<long long> D(N);
for (int i=0; i<N; i++) cin >> D[i];
vector<long long> dp(mx, -1e18);
dp[0] = 100;
for (int i=0; i<mx; i++){
for (int j=0; j<N; j++){
if (!(i & 1LL<<j)){
if (D[j] < 0){
dp[i|(1LL<<j)] = max(dp[i|(1LL<<j)], dp[i]+D[j]);
if (dp[i|(1LL<<j)] <= 0) dp[i|(1LL<<j)] = -1e18;
}
else{
cnt = 0;
for (int k=0; k<N; k++) if ((i & 1LL<<k) && (D[k] < 0)) cnt++;
dp[i|(1LL<<j)] = max(dp[i|(1LL<<j)], min(dp[i]+D[j], (cnt+1) * 100));
}
}
}
}
cout << max(dp[mx-1], 0LL) << endl;
return 0;
}
srjywrdnprkt