背包问题C语言非递归算法程序
时间: 2023-10-14 19:31:23 浏览: 82
背包问题c语言实现算法
以下是背包问题的 C 语言非递归算法程序:
```c
#include <stdio.h>
#define MAX_N 100 // 最大物品数量
#define MAX_W 1000 // 最大背包容量
int max(int a, int b) {
return a > b ? a : b;
}
int knapsack(int n, int w[], int v[], int W) {
int dp[MAX_W + 1] = {0}; // 初始化为 0
for (int i = 0; i < n; i++) {
for (int j = W; j >= w[i]; j--) {
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
}
return dp[W];
}
int main() {
int n, W;
int w[MAX_N], v[MAX_N];
scanf("%d%d", &n, &W);
for (int i = 0; i < n; i++) {
scanf("%d%d", &w[i], &v[i]);
}
printf("%d\n", knapsack(n, w, v, W));
return 0;
}
```
该算法使用动态规划思想,通过填表法求解背包问题,时间复杂度为 $O(nW)$,空间复杂度为 $O(W)$。
阅读全文