結果
| 問題 |
No.771 しおり
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-08-02 16:52:09 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 222 ms / 2,000 ms |
| コード長 | 1,073 bytes |
| コンパイル時間 | 1,084 ms |
| コンパイル使用メモリ | 80,636 KB |
| 最終ジャッジ日時 | 2025-01-12 13:27:45 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 43 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
template <class T>
std::vector<T> vec(int len, T elem) { return std::vector<T>(len, elem); }
constexpr int INF = 1 << 30;
void solve() {
int n;
std::cin >> n;
std::vector<std::pair<int, int>> ps(n);
for (auto& p : ps) {
int a, b;
std::cin >> a >> b;
p = std::make_pair(a, b - a);
}
auto dp = vec(n, vec(1 << n, INF));
for (int i = 0; i < n; ++i) dp[i][1 << i] = 0;
for (int b = 0; b < (1 << n); ++b) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if ((b >> j) & 1) continue;
int nd = std::max(dp[i][b], ps[i].second + ps[j].first);
int nb = b | (1 << j);
dp[j][nb] = std::min(dp[j][nb], nd);
}
}
}
int ans = INF;
for (int i = 0; i < n; ++i) ans = std::min(ans, dp[i].back());
std::cout << ans << "\n";
}
int main() {
std::cin.tie(nullptr);
std::ios::sync_with_stdio(false);
solve();
return 0;
}