
定义状态:
dp[i][j] 表示前 i 个物品恰放入一个容量为 j 的背包可以获得的最大价值。状态转移方程:
i 个物品,那么 dp[i][j] = dp[i-1][j]。i 个物品,且 j >= W[i],那么 dp[i][j] = max(dp[i-1][j], dp[i-1][j-W[i]] + V[i])。初始化:
i = 0,所有 dp[0][j] = 0。j = 0,所有 dp[i][0] = 0。最终结果:
dp[N][totalWeight] 即为所求的最大价值。#include #include #include using namespace std; int main() { int totalWeight,N; cin>>totalWeight>>N; vector value(N+1); vector weight(N+1); for (int i = 1; i <=N; i++) { cin>>weight[i]>>value[i]; } vector> dp(N+1,vector(totalWeight+1, 0)); for(int i=0;i<=N;i++) { for (int j = 1; j <= totalWeight; j++) { if(j 

上一篇:C++模版进阶
下一篇:游戏加速器推荐 网游加速器排行榜