質問: 0; p <= w; p++) { if (p >= vec[i].first) { chmax(dp[i][p], dp[i-1][p-vec[i].first] + vec[i].second); } else { chmax(dp[i][p], dp[i-1][p]); } } } std::cout << dp[n][w] << std::endl; } ```
回答: ``` #include using lli = long long int; template bool chmax(T& a, T b) { if (b > a) { a = b; return true; } return false; } lli n, w; std::vector> vec; std::vector> dp; int main() { std::cin >> n >> w; vec.assign(n+1, {0, 0}); for (lli i = 0; i < n; i++) { //std::cin >> vec[i].first >> vec[i].second; std::cin >> vec[i+1].first >> vec[i+1].second; } dp.assign(n+1, std::vector(w+1, 0)); for (lli i = 1; i <= n; i++) { for (lli p = 0; p <= w; p++) { if (p >= vec[i].first) { chmax(dp[i][p], dp[i-1][p]); chmax(dp[i][p], dp[i-1][p-vec[i].first] + vec[i].second); } else { chmax(dp[i][p], dp[i-1][p]); } } } std::cout << dp[n][w] << std::endl; } ``` このコードでACすることを確認しました。おそらくペアの配列への入力の仕方がおかしかったのだと思われます。