c语言实现
时间: 2023-07-13 21:19:01 浏览: 29
以下是C语言实现代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 1000
#define MAX_W 100000
int dp[MAX_N+1][MAX_W+1]; // 定义dp数组
int main() {
int n, W, i, j;
int w[MAX_N+1];
// 输入
scanf("%d %d", &n, &W);
for(i = 1; i <= n; i++) {
scanf("%d", &w[i]);
}
// 初始化
for(j = 0; j <= W; j++) {
dp[0][j] = 0;
}
// 动态规划求解
for(i = 1; i <= n; i++) {
for(j = 0; j <= W; j++) {
if(w[i] > j) {
dp[i][j] = dp[i-1][j];
} else {
dp[i][j] = dp[i-1][j] > dp[i-1][j-w[i]]+1 ? dp[i-1][j] : dp[i-1][j-w[i]]+1;
}
}
}
// 输出结果
printf("%d\n", dp[n][W]);
return 0;
}
```
需要注意的是,为了方便,代码中假设人的重量不超过100000,如果实际情况超过这一范围,需要相应地修改数组大小。