코드를수정하려고합니다
갅지돋는슬아
질문 제목 :
질문 내용 :
이코드를 보시면 아이템들이 이미 나와있자나요
그런데 저는 이걸 고칠려고해요
제가 입력받는건
물건의 갯수 n과 가방의무게한도 x ,물건의가격과 무게를 입력받아요
여기엔 물건의갯수가 정해져있죠..
이걸 수정하고싶은데 도와주세요
for문안에 스캔을 넣어서 배열로 받으면될꺼같은데 제가 구조체를아직안배워서 너무어렵네요
#include stdio.h
#include stdlib.h
#include stdint.h
typedef struct {
int weight, value;
} item_t;
item_t item[] = {
{9, 150},
{13, 35},
{153, 200},
{50, 160},
{15, 60},
{68, 45},
{27, 60},
{39, 40},
{23, 30},
{52, 10},
{11, 70},
{32, 30},
{24, 15},
{48, 10},
{73, 40},
{42, 70},
{43, 75},
{22, 80},
{7, 20},
{18, 12},
{4, 50},
{30, 10}
};
#define n_items (sizeof(item)/sizeof(item_t))
typedef struct {
uint32_t bits; /* 32 bits, can solve up to 32 items */
int value;
} solution;void optimal(int weight, int idx, solution *s)
{
solution v1, v2;
if (idx 0) {
s-bits = s-value = 0;
return;
}
if (weight item[idx].weight) {
optimal(weight, idx - 1, s);
return;
}
optimal(weight, idx - 1, &v1);
optimal(weight - item[idx].weight, idx - 1, &v2);
v2.value += item[idx].value;
v2.bits |= (1 idx);
*s = (v1.value = v2.value) ? v1 : v2;
}
int main(void)
{
int x;
scanf(%d,&x);
int i = 0, w = 0;
solution s = {0, 0};
optimal(x, n_items - 1, &s);
for (i = 0; i n_items; i++) {
if (s.bits & (1 i)) {
w += item[i].weight;
}
}
printf(Total value: %d; weight: %d\n, s.value, w);
return 0;
}