当前位置: 首页 > news >正文

背包问题——多重背包(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;
}

相关文章:

  • [免费]直接整篇翻译pdf工具-支持多种语言
  • Unity导出WebGL
  • 【GPT入门】第23课 langchain serve介绍
  • 【网页】CSS原子化+变量尝试
  • test skills
  • openai 标准化协议 Structured Outputs 具体示例教程
  • Django settings.py 文件全解析
  • 案例:图书管理
  • 如何保证消息不被重复消费?(如何保证消息消费的幂等性)
  • golang-嵌套结构体
  • Unity利用噪声生成动态地形
  • vscode/windsurf/trae无法识别junit的@Test注解解决办法
  • C# WPF编程-启动新窗口
  • 新版AndroidStudio / IDEA上传项目到Gitee
  • 时间语义与窗口操作:Flink 流式计算的核心逻辑
  • Excel VBA实现智能合并重复元器件数据(型号去重+数量累加)
  • golang函数与方法的区别
  • 【组件安装】Ubuntu 22.04.5 desktop 安装 Anyware Agent
  • springboot441-基于SpringBoot的校园自助交易系统(源码+数据库+纯前后端分离+部署讲解等)
  • c++ 类和对象 —— 中 【复习笔记】
  • 央行召开落实金融“五篇大文章”总体统计制度动员部署会议
  • 西班牙遭遇史上最严重停电,已进入国家紧急状态
  • 中国海警局新闻发言人就菲律宾非法登临铁线礁发表谈话
  • 中日友好医院通报“医师肖某被举报”:基本属实,开除党籍并解聘
  • 李强主持召开国务院常务会议
  • 宣称防老年痴呆的“原装进口”保健品McPee被指涉假,未获澳方销售批准