01背包问题描述:有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,每件物品数量只有一个,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?
害,一遇到动态规划就gg
解题思路及代码:
/*
01背包问题
设f[i][j]表示把i件物品放入承重为j的背包中具有的最大的价值总和
weigh[i]表示第i件物品的重量
value[i]表示第i件物品的价值
则将5件物品装入承重为10的背包中的最大价值f[5][10]的求解可以
分为两个子问题:
第一,取第5件物品的情况。此时最大价值为value[5] + f[4][10 - weigh[5]]
第二,不取第5件物品的情况。此时最大价值为f[4][10]
所以原问题f[5][10]=max{ value[5] + f[4][10 - weigh[5]], f[4][10] }
由此得出状态转移方程:
f[i][j] = max{ f[i - 1][j - weigh[i]] + value[i], f[i - 1][j] }
*/
#include<stdio.h>
int n = 5, C = 10;
int f[6][11];
int weigh[6] = {
0, 2, 2, 6, 5, 4};
int value[6] = {
0, 6, 3, 5, 4, 6};
int res[