背包问题——多重背包(C语言)

代码如下:

复制代码
#include<stdio.h>

int knapsack(int weight[], int value[], int count[], int n, int capacity)
{
	int* dp = (int*)malloc(sizeof(int) * (capacity + 1));

	for (int i = 0; i <= capacity; i++)
	{
		dp[i] = 0;
	}

	for (int i = 0; i < n; i++)//核心代码
	{
		for (int j = capacity; j >= weight[i]; j--)
		{
			for (int k = 0; k <= count[i] && k * weight[i] <= j; k++)
			{
				if (dp[j] < dp[j - k * weight[i]] + value[i] * k)
				{
					dp[j] = dp[j - weight[i] * k] + k * value[i];
				}
			}
		}
	}

	int result = dp[capacity];

	free(dp);
	return result;
}

int main()
{
	int weight[] = { 1,2,3 };//物品重量
	int value[] = { 3,2,1 };//物品价值
	int count[] = { 2,2,2 };//物品数量
	int n = sizeof(weight) / sizeof(weight[0]);//物品种类
	int capacity = 9;//背包容量
	int valuemax = knapsack(weight, value, count, n, capacity);
	printf("背包能装下的最大价值为: %d\n", valuemax);
	return 0;
}
相关推荐
xingke9 小时前
C 语言多文件编程:(一)头文件、extern、编译链接
c语言·开发语言·多文件
wuyk55510 小时前
38.什么是C语言?从语法到工程落地的工程师视角解读
c语言·开发语言·stm32·单片机·mcu·51单片机
某不知名網友13 小时前
C/C++动态内存管理,智能指针及RAlI思想。
java·c语言·c++
一杯奶茶¥14 小时前
c语言程序设计大学期末考试考研知识点重点笔记题库复习资料C语言重点考点题库资料合集
c语言·笔记·考研·c语言程序设计·c语言笔记
p似笑非笑16 小时前
在Mac上完美配置VSCode的C/C++开发环境(GCC/G++详细教程)
c语言·vscode·macos
光芒Shine18 小时前
【C语言-记录点】
c语言
--小林哥--19 小时前
有关ADC的规则组注入组区别的形象解释
c语言
时间的拾荒人20 小时前
C语言编译与链接:从源码到可执行程序的完整解析
c语言·开发语言
不负岁月无痕21 小时前
STL -- C++ 红黑树封装 Map 和 Set
java·c语言·开发语言·c++·面试
luj_17681 天前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法