定义状态:
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++模版进阶
下一篇:游戏加速器推荐 网游加速器排行榜