/*
在编号为a,b,c,d,e 的五件物品,他们的重量分别是2,2,6,5,4.价值分别是6,3,5,4,6,给你个承重是10的背包,如何让装入背包的物品具有最大价值.
*//*
* 基本的0-1背包问题:
* 已知有N类物品,每类物品都只有一件,对应的重量为w[i],价值为v[i]。
* 背包最多承重为W,在不超出承重范围的前提下,求能拿的物件的最大价值为多少
*
*这是DP的一个经典实例,可以用动态规划求解
*设dp(i,j)表示对于前i件物品,背包剩余容量为j时,能取得的最大价值
*状态转移方程:dp(i,j) = Max(dp(i-1,j), dp(i-1,j-w[i])+v[i])
*注: dp(i-1,j) -----》 dp(i,j),即不拿第i件物品
* dp(i-1,j-w[i]) -----》 dp(i,j),即拿第i件物品
* 当物品数量很多,背包的容量很大时,这时要用二维数组往往是不现实的
* 我们可以进行空间压缩,使用一维数组实现
* 状态转移方程:
* dp(j)=Max(dp(j),dp(j-w[i])+v[i])
* 注:对于背包的容量要采用倒序的方式!
*/
#include<stdio.h>
#include<iostream>
using namespace std;
#define N 5 // N件宝贝
#define V 10 // C是背包的总capacity
int main()
{
int value[N + 1] = {0, 6, 3, 5, 4, 6}; // 钱
int weight[N + 1] &#
01背包问题 动态规划 c语言实现
最新推荐文章于 2025-03-19 08:00:20 发布