Red Huang

Red Huang

ナップサック問題

背包の中の物品の総価値を最大にする

  1. const int N = 100, W = 100000;

  2. int cost[N], weight[N];

  3. int c [W + 1];   // 1 つの配列だけで十分です

  4. void knapsack(int n, int w)

  5. {

  6.     memset(c, 0, sizeof(c));

  7.     for (int i = 0; i < n; ++i)

  8.         for (int j = w; j - weight [i] >= 0; --j)    // 後ろから前へ

  9.             c[j] = max(c[j], c[j - weight[i]] + cost[i]);

  10.     cout << "最高の価値は" << c [w];

  11. }

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。