結果
| 問題 |
No.818 Dinner time
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-06-21 22:52:59 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,344 bytes |
| コンパイル時間 | 775 ms |
| コンパイル使用メモリ | 81,372 KB |
| 実行使用メモリ | 27,300 KB |
| 最終ジャッジ日時 | 2025-06-21 22:53:04 |
| 合計ジャッジ時間 | 4,939 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 TLE * 1 |
| other | -- * 29 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N, D;
vector<int> A, B;
int max_score = 0;
void dfs(int day, vector<bool> used, int score) {
if (day == D) {
max_score = max(max_score, score);
return;
}
for (int L = 1; L <= N; ++L) {
// Lấy danh sách gà còn sống từ 1 đến L
vector<int> alive;
for (int i = 0; i < L; ++i) {
if (!used[i]) alive.push_back(i);
}
int K = alive.size();
// Thử mọi cách chọn: 2^K tổ hợp trứng/thịt
for (int mask = 0; mask < (1 << K); ++mask) {
vector<bool> new_used = used;
int gain = 0;
for (int i = 0; i < K; ++i) {
int g = alive[i];
if ((mask >> i) & 1) {
// Làm thịt
gain += B[g];
new_used[g] = true;
} else {
// Đẻ trứng
gain += A[g];
}
}
dfs(day + 1, new_used, score + gain);
}
}
}
int main() {
cin >> N >> D;
A.resize(N);
B.resize(N);
for (int i = 0; i < N; ++i) {cin >> A[i]>>B[i];}
vector<bool> used(N, false);
dfs(0, used, 0);
cout << max_score << endl;
return 0;
}