01背包问题c语言代码
时间: 2023-10-16 07:07:47 浏览: 89
以下是01背包问题的C语言代码:
#include <stdio.h>
#define MAX_N 100 // 物品数量的最大值
#define MAX_W 1000 // 背包容量的最大值
int n, W; // 物品数量和背包容量
int w[MAX_N], v[MAX_N]; // 物品的重量和价值
int dp[MAX_N + 1][MAX_W + 1]; // DP数组
// 01背包问题的解法
int solve() {
for (int i = 0; i < n; i++) {
for (int j = 0; j <= W; j++) {
if (j < w[i]) {
dp[i + 1][j] = dp[i][j];
} else {
dp[i + 1][j] = dp[i][j] > dp[i][j - w[i]] + v[i] ? dp[i][j] : dp[i][j - w[i]] + v[i];
}
}
}
return dp[n][W];
}
int main() {
scanf("%d%d", &n, &W);
for (int i = 0; i < n; i++) {
scanf("%d%d", &w[i], &v[i]);
}
int ans = solve();
printf("%d\n", ans);
return 0;
}
阅读全文