#include<stdio.h>
#define M 14
#define N 6
typedef struct Goods {
char* name;
int price;
int volume;
}Goods;
void Printf(int a[][M]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
printf("%3d", a[i][j]);
}
printf("\n");
}
return;
}
void PackGoods(Goods goods[], int a[][14]) {
int MaxPrice , j;
for (int i = 0; i < M; i++) {
a[0][i] = 0;
}
for (int i = 0, j = 0; i < N; i++) {
a[i][j] = 0;
}
for (int i = 1; i < N; i++) {
for (int j = 1; j < M; j++) {
a[i][j] = a[i - 1][j];
}
for (int j = 1; j < M; j++) {
if (goods[i].price + a[i - 1][j - goods[i].volume] > a[i - 1][j] && j >= goods[i].volume) {
a[i][j] = goods[i].price + a[i - 1][j - goods[i].volume];
}
if (j == 13) {
break;
}
}
}
MaxPrice = a[N - 1][M - 1];
printf("最大的价格为:%d\n", MaxPrice);
j = M - 1;
for (int i = N - 1; i >= 1; i--) {
if (a[i][j] != a[i - 1][j]) {
printf("买了%s,价格为%d\n", goods[i].name, goods[i].price);
j = j - goods[i].volume;
}
}
return;
}
void main() {
Goods goods[6] = { {0}, {"啤酒",24,10},{"汽水",2,3},{"饼干",9,4},{"面包",10,5},{"牛奶",9,4 } };
int a[6][14];
PackGoods(goods, a);
Printf(a);
return;
}