最近プログラミングを始めた初心者なのですが、最近dpを学び始めました。
次の問題に提出をしたのですが、ACが出なくて困っています。色々と問題がありそうなところは修正してみたのですが、どうにも入力されるデータが大きいと正しい答えが出力できていないようです。言語はC++(GCC 9.2.1)です。どなたか、アドバイスお願いします。
提出したコードおよび問題は以下のリンクです。
Educational DP Contest D-Knapsack 1
何卒よろしくお願い申し上げます。
リンク先のコードです
C++(GCC
1#include<bits/stdc++.h> 2using namespace std; 3 4 5int main() { 6 long long n, w; 7 cin >> n >> w; 8 long long wei[n], val[n]; 9 long long dp[200010][110]; 10 11 for (long long i = 0; i < n; i++){ 12 cin >> wei[i] >> val[i]; 13 } 14 15 for (long long i = 0; i < 200010; i++){ 16 for (long long j = 0; j < 110; j++){ 17 dp[i][j] = 0; 18 } 19 } 20 21 dp[wei[0]][0] = val[0]; 22 dp[wei[0]][1] = val[0]; 23 24 for (long long i = 1; i < n; i++){ 25 for (long long j = 0; j < w; j++){ 26 dp[j + wei[i]][i] = max(dp[j + wei[i]][i], max(dp[j + wei[i]][i], dp[j][i - 1] + val[i])); 27 dp[j + wei[i]][i + 1] = dp[j + wei[i]][i]; 28 dp[j + wei[i] + 1][i] = max(dp[j + wei[i] + 1][i], dp[j + wei[i]][i]); 29 } 30 } 31 32 cout << dp[w][n - 1] << endl; 33}
コードを提示しよう
回答1件
あなたの回答
tips
プレビュー