[競プロ][C++] Knapsack DP
[2022/7/30] 「i+1 -> i + 1」のような変更をしました。
| 順位 | 名前 | スコア | 称号 | 打鍵/秒 | 正誤率 | 時間(秒) | 打鍵数 | ミス | 問題 | 日付 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Hen | 3399 | D | 3.8 | 90.2% | 116.5 | 444 | 48 | 22 | 2026/01/12 |
関連タイピング
-
プレイ回数2.2万 英字60秒
-
C++の予約語や関数名などを使います
プレイ回数3663 英字30秒 -
プレイ回数522 英語長文417打
-
E869120氏が送った煽り性能が高い文章
プレイ回数2059 長文297打 -
競技プログラミングに特化したc++コードのタイピングです。
プレイ回数2850 英語長文300秒 -
※long long → ll, vector → vc
プレイ回数213 英語90秒 -
競プロで早く打てるようになりたいC++er向け
プレイ回数944 英語長文180秒 -
遅延伝搬反転可能乱択平衡二分木と一回打つだけ
プレイ回数329 かな48打
問題文
ふりがな非表示
ふりがな表示
(#include <bits/stdc++.h>)
#include <bits/stdc++.h>
(using namespace std;)
using namespace std;
(int main() {)
int main() {
(int N, W;)
int N, W;
(cin >> N >> W;)
cin >> N >> W;
(vector<int> w(N), v(N);)
vector<int> w(N), v(N);
(for (int i = 0; i < N; i++) {)
for (int i = 0; i < N; i++) {
(cin >> w[i] >> v[i];)
cin >> w[i] >> v[i];
(})
}
(vector<vector<int>> dp(N + 1, vector<int>(W + 1, 0));)
vector<vector<int>> dp(N + 1, vector<int>(W + 1, 0));
(for (int i = 0; i < N; i++) {)
for (int i = 0; i < N; i++) {
(for (int j = 0; j <= W; j++) {)
for (int j = 0; j <= W; j++) {
(if (0 <= j - w[i]) {)
if (0 <= j - w[i]) {
(dp[i + 1][j] = max(dp[i][j], dp[i][j - w[i]] + v[i]);)
dp[i + 1][j] = max(dp[i][j], dp[i][j - w[i]] + v[i]);
(} else {)
} else {
(dp[i + 1][j] = dp[i][j];)
dp[i + 1][j] = dp[i][j];
(})
}
(})
}
(})
}
(int ans = *max_element(dp[N].begin(), dp[N].end());)
int ans = *max_element(dp[N].begin(), dp[N].end());
など
(cout << ans << endl;)
cout << ans << endl;
(})
}