結果
問題 | No.2364 Knapsack Problem |
ユーザー | random contestant |
提出日時 | 2023-06-30 21:53:19 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 3,000 ms |
コード長 | 1,387 bytes |
コンパイル時間 | 4,417 ms |
コンパイル使用メモリ | 264,836 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-07 09:36:41 |
合計ジャッジ時間 | 4,812 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 20 |
ソースコード
// #define _GLIBCXX_DEBUG #include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; using ll = long long; #define rep(i,n) for (ll i = 0; i < (n); ++i) using vl = vector<ll>; using vvl = vector<vl>; using P = pair<ll,ll>; #define pb push_back #define int long long #define double long double #define INF (ll) 3e18 // Ctrl + Shift + B コンパイル // Ctrl + C 中断 // ./m 実行 signed main(){ int n, m, w; cin >> n >> m >> w; vl a(n); vl b(n); vl c(m); vl d(m); rep(i,n) cin >> a[i]; rep(i,n) cin >> b[i]; rep(i,m) cin >> c[i]; rep(i,m) cin >> d[i]; int bitsize = (1LL << (n+m)); vector<P> dp(bitsize, P(-INF, -INF)); dp[0] = P(0,0); rep(i, bitsize){ rep(j, n+m){ if (i & (1<<j)) continue; if (j < n){ if (dp[i].first + a[j] <= w){ dp[i|(1<<j)].first = max(dp[i|(1<<j)].first, dp[i].first + a[j]); dp[i|(1<<j)].second = max(dp[i|(1<<j)].second,dp[i].second + b[j]); } } else{ if (dp[i].first - c[j-n] >= 0) { dp[i|(1<<j)].first = max(dp[i|(1<<j)].first,dp[i].first - c[j-n]); dp[i|(1<<j)].second = max(dp[i|(1<<j)].second,dp[i].second - d[j-n]); } } } } int ans = 0; for(auto x : dp) ans = max(ans, x.second); // for(auto x : dp) cout << x.first << " " << x.second << endl; cout << ans << endl; }