背包问题——多重背包(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;
}
相关推荐
Yue丶越2 小时前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
蓝牙先生4 小时前
简易TCP C/S通信
c语言·tcp/ip·算法
Old_Driver_Lee5 小时前
C语言常用语句
c语言·开发语言
松涛和鸣5 小时前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法
无限进步_8 小时前
C语言动态内存的二维抽象:用malloc实现灵活的多维数组
c语言·开发语言·数据结构·git·算法·github·visual studio
星轨初途10 小时前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法
f***019311 小时前
CC++链接数据库(MySQL)超级详细指南
c语言·数据库·c++
小曹要微笑12 小时前
STM32F7 时钟树简讲(快速入门)
c语言·stm32·单片机·嵌入式硬件·算法
前端世界14 小时前
float 还是 double?用储罐体积计算带你看懂 C 语言浮点数的真实世界坑
java·c语言·开发语言
小青龙emmm15 小时前
2025级C语言第二次周测(国教专用)题解
c语言·开发语言·算法