01背包动态规划问题初析
#include<iostream> #include<algorithm> #include<cstring> #define maxn 105 using namespace std; int w[maxn]; //物品所占 int v[maxn]; //物品价值 int dp[maxn][maxn]; int main() { int n, m; cin >> n >> m; //输入物品个数与背包最大容纳值 for(int i = 1; i <= n; i++) cin >> w[i] >> v[i]; //输入物品所占与物品价值 for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ if(w[i] > j) dp[i][j] = dp[i-1][j];//装不下 else{ dp[i][j] = max(dp[i-1][j-w[i]]+v[i], dp[i-1][j]); //前一行每一列+剩余容量最大价值 //价值没有更大,则不装满剩余容量,继续观望 } } } cout << dp[n][m]; }
详情参见:
问题与代码:https://blog.csdn.net/lady_killer9/article/details/86260896
图:https://www.cnblogs.com/kkbill/p/12081172.html
两相结合理解。
浙公网安备 33010602011771号