結果
問題 | No.951 【本日限定】1枚頼むともう1枚無料! |
ユーザー |
|
提出日時 | 2020-08-04 05:20:16 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 73 ms / 2,000 ms |
コード長 | 929 bytes |
コンパイル時間 | 1,092 ms |
コンパイル使用メモリ | 89,604 KB |
最終ジャッジ日時 | 2025-01-12 14:12:39 |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 52 |
ソースコード
#include <iostream> #include <algorithm> #include <vector> 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, k; std::cin >> n >> k; std::vector<std::pair<int, int>> ps(n); for (auto& p : ps) std::cin >> p.first >> p.second; std::sort(ps.rbegin(), ps.rend()); auto dp = vec(2, vec(k + 1, 0)); std::fill(dp[1].begin(), dp[1].end(), -INF); auto ndp = dp; for (auto [p, d] : ps) { for (int i = 0; i <= k; ++i) { ndp[0][i] = std::max(ndp[0][i], dp[1][i] + d); } for (int i = p; i <= k; ++i) { ndp[1][i - p] = std::max(ndp[1][i - p], dp[0][i] + d); } dp = ndp; } std::cout << std::max(dp[0][0], dp[1][0]) << "\n"; } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); solve(); return 0; }