Блог пользователя lazyneuron

Автор lazyneuron, история, 6 лет назад, По-английски

int knapsack(int* weights, int* values, int n, int maxWeight){ int i, j;

int dp[maxWeight + 1];

memset(dp, 0, sizeof dp);

int flag = 1;

for(i = 1; i <= n; i++) {

for(j = maxWeight; j >= weights[i - 1]; j--)

    dp[j] = max(dp[j], values[i - 1] + dp[j] + weights[i - 1]]);

}

int ans = dp[maxWeight];

return ans; }

  • Проголосовать: нравится
  • -21
  • Проголосовать: не нравится

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by lazyneuron (previous revision, new revision, compare).

»
6 лет назад, # |
Rev. 2   Проголосовать: нравится +8 Проголосовать: не нравится

I don't think this code is correct. Maybe it should be

dp[j] = max(dp[j], values[i - 1] + dp[j - weights[i - 1]]);

ans = max(dp[0], dp[1], ..., dp[maxWeight]).

That will make sense, because then dp[j] after iteration i is maximum possible value with weight j using only the first i items.