⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 动态规划算法解背包问题.cpp

📁 自己编写的
💻 CPP
字号:
#include <iostream>
const int N = 100;
using namespace std;

int max(int a,int b)
{
	return (a > b ? a : b);
}


int main()
{
	int n;    // 物品总数
	int W;    // 背包总重量
	scanf("%d%d",&n,&W);
	int v[N]; // 存放各个物品的价值
	int w[N]; // 存放各个物品重量
	int f[N][N]; // 存放最终结果
	int flag[N]; // 标记数组,标记某个物品是否被选取
	int i,j;
	for(i = 0; i < n; i++)
		scanf("%d",&v[i]);
	for(i = 0; i < n; i++)
		scanf("%d",&w[i]);

	memset(flag,1,sizeof(flag)); // 标记数组赋初值

	// 初始化,只有一个物品的情况,也是边界
	for(j = 0; j <= w[0]-1; j++)
		f[0][j] = 0;
	for(j = w[0]; j <= W; j++)
		f[0][j] = v[0];
	
	for(i = 1; i < n; i++)
		for(j = 0; j <= W; j++)
			if(w[i] > j)
				f[i][j] = f[i-1][j];
			else
				f[i][j] = max(f[i-1][j],f[i-1][j-w[i]]+v[i]);
			
	printf("%d",f[n-1][W]);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -