编辑代码

#include <stdio.h>  
// 物品结构体  
typedef struct {  
    int weight;  
    int value;  
} Item;  
int max(int a,int b){
	if(a>b){
		return a;
	}
	else {
		return b;
	}
}
// 动态规划函数  
int BQ(Item items[], int n, int m) {   
    int table[n + 1][m + 1];  // 用于保存子问题的解  
    // 初始化表格  
    for (int i = 0; i <= n; i++) {  
        for (int j = 0; j <= m; j++) {  
            if (i == 0 || j == 0) {  
                table[i][j] = 0;  
            } else if (items[i - 1].weight <= j) {  
                table[i][j] = max(items[i - 1].value + table[i - 1][j - items[i - 1].weight], table[i - 1][j]);  
            } else {  
                table[i][j] = table[i - 1][j];  
            }  
            printf("%d",table[i][j]);
        }  
        printf("\n");
    }  
    return table[n][m];  // 返回最大价值  
} 
int main() {  
    Item items[] = {{2, 3}, {3, 4}, {4, 5}, {5, 6}};  // 物品数组,每个元素表示一个物品的重量和价值  
    printf("最大价值为: %d\n", BQ(items, sizeof(items) / sizeof(Item), 5));  // 输出最大价值  
    Item items2[] = {{1, 3}, {2, 4}, {3, 5}, {4, 6}};  // 物品数组,每个元素表示一个物品的重量和价 
    printf("最大价值为: %d\n", BQ(items2, sizeof(items) / sizeof(Item), 5));  // 输出最大价值  
    Item items3[] = {{5, 3}, {6, 4}, {7, 5}, {8, 6}};  // 物品数组,每个元素表示一个物品的重量和价
    printf("最大价值为: %d\n", BQ(items3, sizeof(items) / sizeof(Item), 5));  // 输出最大价值  
    return 0;  
}