标签:ring div 动态 hid 情况 png color images 背包
任务说明:这是最基础的动态规划。不过如果是第一次接触会有些难以理解。加油闯过这个坎。
P1060 开心的金明
小明的妈妈给小明N元钱,小明想买m件物品,每个物品价值为 价格*重要度,求出不超过N元钱的情况下,最多能买多少价值的物品,输出价值。
解法:直接的01背包问题,我居然还去看了书。。递推方程一次写不出来。方程需要记忆。
dp[i][j]表示前i件物品总价格不超过j元的最大总价值。
需要学习下怎么在博客园输入latex公式orz。。。
#include <iostream> #include <vector> #include <cstdio> #include <cstring> using namespace std; int main() { int n, m; cin >> n >> m; int w[m][2]; for (int i = 0; i < m; ++i) { cin >> w[i][0] >> w[i][1]; w[i][1] *= w[i][0]; } int dp[m+1][n+1]; memset(dp, 0, sizeof(dp)); for (int i = 1; i <= m; ++i) { for (int j = 1; j <= n; ++j) { if (w[i-1][0] > j) { dp[i][j] = dp[i-1][j]; } else { dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i-1][0]] + w[i-1][1]); } } } cout << dp[m][n] << endl; return 0; }
dp[0][j] = 0;
dp[i+1][j] =
\dp[0][j] = 0;
dp[i+1][j] = \begin{cases}
dp[i][j] & \text{ if } w[i][0]>j
& \text max(dp[i][j], dp[i][j-w[i][0] + w[i][1]) & \text{ else }
\end{cases}
dp[0][j] = 0;
dp[i+1][j] = \begin{cases}
dp[i][j] & \text{ if } w[i][0]>j
& \text max(dp[i][j], dp[i][j-w[i][0] + w[i][1]) & \text{ else }
\end{cases}
小A点菜
金明的预算方案
采药
装箱问题
疯狂的采药
【Luogu】【关卡2-15】动态规划的背包问题(2017年10月)
标签:ring div 动态 hid 情况 png color images 背包
原文地址:http://www.cnblogs.com/zhangwanying/p/7647066.html