***すれ立てるまでもない質問はここで 第17刷***
ナップサック問題のプログラムなんですけど、わけわかんないんでコメントつけてもらえませんか?
#include <stdio.h>
#define LIMIT 121
#define NUMBER 10
struct nimotu {
char name;
int weight;
int value;
} nimotu[] = {
{ 'a', 39, 42 }, { 'b', 13, 12 }, { 'c', 68, 45 }, { 'd', 15, 5 }, { 'e', 10, 2 },
{ 'f', 20, 61 }, { 'g', 31, 89 }, { 'h', 15, 32 }, { 'i', 41, 47 }, { 'j', 16, 18 }
};
int total_value[1 << NUMBER]; /*[]の中身は?*/
int main(void) {
int i, max_value = -1; /*なんで−1なのでしょう?*/
for ( i = 0; i < (1 << NUMBER); i++ ) { /*ここの<<の部分*/
int j, total_weight = 0;
for ( j = 0; j < NUMBER; j++ ) {
if ( i & (1 << j) ) { /*ここの<<の部分*/
total_weight += mimotu[j].weight;
total_value[i] += nimotu[j].value;
}
}
if ( total_weight > LIMIT )
total_value[i] = -1;
if ( total_value[i] > max_value )
max_value = total_value[i];
}
for ( i = 0; i < (1 << NUMBER); i++ ) { /*ここの<<*/
if ( total_value[i] == max_value ) {
int j;
printf( "Choise:" );
for ( j = 0; j < (int)NUMBER; j++ )
if ( i & (1 << j) )
printf( " %c", nimotu[j].c );
printf( "total value: %d\n", total_value[i] );
}
}
return 0;
}
これがどういう流れで処理しているかわかりませんか?
今追い詰められていて困っているんです…
ビットシフト演算の部分もよくわからないんです。
>>975 宿題スレで6分前に聞いておいて、なぜここでも聞く?
マルチポストに見せかけたコピペの可能性あり。
ま、放置で。
>>976 申し訳ないのはわかっているのですが、今本当に切羽詰っているんです。
一生懸命本で調べているのですが、なかなか理解できなくて…
分かっててやったなら救いようがない
答えがもらえるとは思うな