***すれ立てるまでもない質問はここで 第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
申し訳ないのはわかっているのですが、今本当に切羽詰っているんです。
一生懸命本で調べているのですが、なかなか理解できなくて…

分かっててやったなら救いようがない
答えがもらえるとは思うな