という問題ですが、以下のような組み方をしたらセグメントエラーが起きてしまいました。
int solveMax(int limit, const Item *items, int n_items){
long newvalue, value[limit+1];
int item[limit+1],i,s,p;
for(i=0;i<=9;i++)
value[i]=0;
printTableHead(limit);
for(i=0;i<6;i++){
for(s=items[i].size;s<=limit;s++){
p=limit-s;
newvalue=solveMax(p,items,n_items)+items[i].price;
if(newvalue>value[s]){
value[s]=newvalue;
item[s]=i;
}
printTableBody(*value, limit, *item) ;
}
}
}
またメインプログラム他関数ははじめから用意されており以下のデータ構造です
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MIN 1
enum { MINIMIZE, MAXIMIZE };
typedef struct __Item {
char *name;
int size;
int price;
} Item;
int solveMax(int limit, const Item *items, int n_items);
void printSolve(int limit, const Item *items, int *item, int *value);
void printTableHead(int limit);
void printTableBody(int *value, int limit, int *item);
int main(void) {
Item items[]={
{"plum", 4, 4500},
{"apple", 5, 5700},
{"orange", 2, 2250},
{"strawberry", 1, 1100},
{"melon", 6, 6700},
{"grape", 3, 3400}
};
int limit = 8;
int n_items = 6;
int v;
printf("Input Limit: ");
scanf("%d", &limit);
v = solveMax(limit, items, n_items);
}
//
// 最適解表示用
void printSolve(int limit, const Item *items, int *item, int *value) {
int s, v;
printf(" Items| Price\n");
printf("----------+-------\n");
for(s = limit; s >= MIN; s = s - items[item[s]].size) {
printf("%10s|%7ld\n", items[item[s]].name, items[item[s]].price);
}
printf("----------+-------\n");
v = value[limit];
printf(" Total|%7ld\n", v);
}
// テーブル表示用
void printTableHead(int limit) {
int j;
for (j = 1; j <= limit; j++) {
printf("%7d|", j);
}
printf("\n");
for (j = 1; j <= limit; j++) {
printf("=======+");
}
printf("\n");
}
void printTableBody(int *value, int limit, int *item) {
int j, v;
for (j = 1; j <= limit; j++) {
v = value[j];
printf("%7d|", v);
}
printf("\n");
for (j = 1; j <= limit; j++) {
if (item[j] >= 0)
printf("%7d|", item[j]);
else
printf(" -|");
}
printf("\n");
for (j = 1; j <= limit; j++) {
printf("-------+");
}
printf("\n");
}
OSはLinux コンパイラはgcc 期限は2/23までですよろしくお願いします。