动态规划01背包问题c语言代码
时间: 2023-07-23 14:20:24 浏览: 51
以下是动态规划01背包问题的C语言代码实现:
```c
#include<stdio.h>
#define N 100
#define C 1000
int w[N], v[N], dp[N][C];
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int n, c;
scanf("%d %d", &n, &c);
for(int i = 1; i <= n; i++) {
scanf("%d %d", &w[i], &v[i]);
}
for(int i = 1; i <= n; i++) {
for(int j = 0; j <= c; j++) {
if(j >= w[i]) {
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+v[i]);
}
else {
dp[i][j] = dp[i-1][j];
}
}
}
printf("%d\n", dp[n][c]);
return 0;
}
```
其中,数组w和v分别表示物品的重量和价值,数组dp表示状态转移方程中的二维数组。在代码中,使用两层循环遍历所有的物品和容量,根据状态转移方程更新dp数组。最终的结果即为dp[n][c]。
阅读全文