动态规划C语言

#include <stdio.h>

#include <stdlib.h>

//0-1背包问题是一种经典的组合优化问题,

//问题描述为:有一个给定容量的背包和一组具有不同价值和重量的物品,如何选择物品放入背包中,以使得背包中物品的总价值最大化,同时不超过背包的容量限制。

#define max(a, b) ((a) > (b) ? (a) : (b))

int knapsack(int W, int wt\[\], int val\[\], int n) {//背包函数这是一个名为knapsack的函数,它接受四个参数:

//W:表示背包的总容量。

//wt\[\]:一个整数数组,表示每个物品的重量。

//val\[\]:一个整数数组,表示每个物品的价值。

//n:表示物品的数量。

int i, w;

int Kn+1W+1; // 填充 K()() 数组

for (i = 0; i <= n; i++) {//遍历每个物品

for (w = 0; w <= W; w++) {//遍历背包容量

if (i == 0 || w == 0) {

Kiw = 0;

} else if (wti-1 <= w) {// 如果物品i的重量wti-1小于等于背包容量w,

Kiw = max(vali-1 + Ki-1w-wt\[i-1], Ki-1w);

//可以将物品i放入背包,或者不放入背包。在这两种情况下,选择能够获得更大总价值的方案,并将对应的价值存储在Kiw中。

} else {//如果物品i的重量wti-1大于背包容量w,那么物品i无法放入背包,因此Kiw的值保持不变,即等于Ki-1w

Kiw = Ki-1w;

}

}

}

return KnW;//即表示在给定背包容量和物品重量、价值的情况下,能够装入背包的物品的最大总价值。

}

int main() {

int val\[\] = {60, 100, 120};

int wt\[\] = {10, 20, 30};

int W = 50;

int n = sizeof(val) / sizeof(val0);//物品的数量

printf("背包中能装的最大价值为:%d\n", knapsack(W, wt, val, n));

return 0;

}

相关推荐
syagain_zsx13 分钟前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_3077791335 分钟前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
我是章汕呐1 小时前
地级市能源消耗量及消耗强度数据【2006-2023年】平衡面板
人工智能·经验分享·算法·回归
charliejohn2 小时前
计算机考研 408 数据结构 堆的插入与删除 堆排序
算法
老鱼说AI2 小时前
从点积到希尔伯特空间:向量内积的几何本质与大模型相似度度量
人工智能·深度学习·线性代数·算法·机器学习·数学建模
地平线开发者3 小时前
模型部署|如何解决算子约束
深度学习·算法·自动驾驶
Navigator_Z3 小时前
LeetCode //C - 1254. Number of Closed Islands
c语言·算法·leetcode
deepseek233 小时前
GPT-6 Astra 破解 FrontierMath 九年悬案拆解:调和熵投票规则反证核恒非空,局部搜索如何终结反例悬赏
人工智能·算法·ai agent
syagain_zsx4 小时前
算法基础篇 · 04 前缀和(C++ 题解)
c++·算法·前缀和
Logic1014 小时前
C语言/数据结构滑动窗口题解:替换k个字符后的最长连续相同字符子串(LeetCode 424)
c语言·数据结构·字符串·滑动窗口·时间复杂度·频率统计·算法题