贪心算法背包问题c语言代码
时间: 2023-05-17 15:00:41 浏览: 209
0-1背包问题(贪心算法)C语言源程序
5星 · 资源好评率100%
贪心算法是一种常见的近似算法,用于在图论、排队问题、选择问题等多种实际问题中求解最优解。而背包问题是一个经典的优化问题,是贪心算法常用的应用之一。
以下是一个贪心算法背包问题的C语言代码:
#include <stdio.h>
int main() {
int n, i, j, w[100], v[100], c, ans = 0;
float t; //比率
printf("请输入背包数量和可容纳重量:\n");
scanf("%d %d", &n, &c);
printf("请输入每个背包的重量和价值:\n");
for (i = 1; i <= n; i++) {
scanf("%d %d", &w[i], &v[i]);
}
//计算每个背包的比率,按比率排序
for (i = 1; i <= n; i++) {
for (j = i + 1; j <= n; j++) {
if ((float) v[i] / w[i] < (float) v[j] / w[j]) {
t = (float) v[i] / w[i];
v[i] = v[j];
w[i] = w[j];
v[j] = (int) (v[i] / t);
w[j] = (int) (w[i] / t);
}
}
}
//不断选取比率最高的背包
for (i = 1; i <= n && c > 0; i++) {
if (w[i] <= c) {
ans += v[i];
c -= w[i];
} else {
ans += (int) (v[i] * ((float) c / w[i]));
c = 0;
}
}
printf("该背包能够获取的最大价值为:%d", ans);
return 0;
}
输入数据后,程序首先计算每个背包的比率,按比率从高到低排序。接下来,程序从比率最高的背包开始,一直按比率选取背包,直到无法再选取为止。在选取背包时,程序优先选取可以直接放进背包的背包,如果一个背包无法完全放进背包,程序则按比率选取部分放进背包。最后,程序输出可获取的最大价值。
以上是一个简单的贪心算法背包问题C语言代码。通过这个例子,我们可以看到贪心算法的两个重要特点:1. 每一步只考虑当前最优解。2. 最终结果必须为最优解。但是,贪心算法也有其局限性,它不一定能够找到全局最优解,而只能得到一个近似最优解。因此,在实际应用中,我们需要结合问题特点,选择合适的算法,避免贪心算法带来的误差。
阅读全文