結果
問題 |
No.1947 質より種類数
|
ユーザー |
|
提出日時 | 2022-08-08 06:21:40 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 396 ms / 2,000 ms |
コード長 | 897 bytes |
コンパイル時間 | 2,432 ms |
コンパイル使用メモリ | 198,496 KB |
最終ジャッジ日時 | 2025-01-30 19:24:13 |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 37 |
ソースコード
typedef long long ll; typedef long double ld; #include <bits/stdc++.h> using namespace std; #define int long long signed main(){ ll n,V,c; std::cin >> n>>V>>c; vector<ll> v(2*n),w(2*n); for (int i = 0; i < n; i++) { std::cin >> v[2*i]>>w[2*i]; v[2*i+1] = v[2*i]; w[2*i+1] = w[2*i]; w[2*i] += c; } vector<vector<ll>> dp(2*n+1,vector<ll>(V+1,-1e18)); dp[0][0]=0; for (int i = 0; i < 2*n; i++) { for (int j = 0; j <= V; j++) { dp[i+1][j] = dp[i][j]; if(i%2==0){ if(j-v[i]>=0)dp[i+1][j] = max(dp[i+1][j],dp[i][j-v[i]]+w[i]); }else{ if(j-v[i]>=0)dp[i+1][j] = max(dp[i+1][j],dp[i+1][j-v[i]]+w[i]); } } } ll ans = 0; for (int i = 0; i <= V; i++) { ans = max(ans, dp[2*n][i]); } std::cout << ans << std::endl; }