#include<stdio.h> #define max(a, b) ((a) > (b) ? (a) : (b)) int w[21]={0}; int v[21]={0}; int flag[21]={0}; int arr[21][1024]={0}; int main() { int n=0,c=0; scanf("%d%d",&n,&c); for(int i=1;i<=n;i++) { scanf("%d",&w[i]); } for(int i=1;i<=n;i++) { scanf("%d",&v[i]); } for(int i=1;i<=n;i++) {//物品i for(int j=1;j<=c;j++) {//重量j if(j>=w[i]) { arr[i][j]=max(arr[i-1][j],arr[i-1][j-w[i]]+v[i]); } else arr[i][j]=arr[i-1][j]; } } printf("%d ",arr[n][c]); int h=n,g=c; while(h>=1) { if(arr[h][g]==arr[h-1][g])flag[h]=0; else { flag[h]=1; g=g-w[h]; } h--; } for(int i=1;i<=n;i++) { printf("%d",flag[i]); } return 0; }添加数据结构设计
时间: 2023-12-18 21:02:08 浏览: 59
可以使用结构体来设计物品的属性,如重量、价值等。具体实现可以如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define max(a, b) ((a) > (b) ? (a) : (b))
struct item {
int weight;
int value;
};
int arr[21][1024] = {0};
int flag[21] = {0};
int main()
{
int n = 0, c = 0;
scanf("%d%d", &n, &c);
struct item items[21];
for (int i = 1; i <= n; i++) {
scanf("%d", &items[i].weight);
}
for (int i = 1; i <= n; i++) {
scanf("%d", &items[i].value);
}
for (int i = 1; i <= n; i++) { // 物品 i
for (int j = 1; j <= c; j++) { // 重量 j
if (j >= items[i].weight) {
arr[i][j] = max(arr[i-1][j], arr[i-1][j-items[i].weight] + items[i].value);
} else {
arr[i][j] = arr[i-1][j];
}
}
}
printf("%d ", arr[n][c]);
int h = n, g = c;
while (h >= 1) {
if (arr[h][g] == arr[h-1][g]) {
flag[h] = 0;
} else {
flag[h] = 1;
g = g - items[h].weight;
}
h--;
}
for (int i = 1; i <= n; i++) {
printf("%d", flag[i]);
}
printf("\n");
return 0;
}
```
在代码中,我们定义了一个结构体 `item` 表示物品,包含了重量和价值两个属性。在输入物品时,我们将它们存储在 `items` 数组中。在动态规划过程中,我们使用了 `items[i].weight` 和 `items[i].value` 来获取物品的重量和价值。
阅读全文