Knapsack_0/1

 #include <iostream>

using namespace std;
int dp[5][9];
int knapsack(int n, int m, int w[], int p[])
{
    int i, j;
    for (i = 0; i <= n; i++)
    {
        dp[i][0] = 0;
    }
    for (j = 0; j <= m; j++)
    {
        dp[0][j] = 0;
    }
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= m; j++)
        {
            if (w[i] > j)
                dp[i][j] = dp[i - 1][j];
            else
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + p[i]);
        }
    }
    return dp[n][m];
}

int main()
{
    int i, j;
    int n = 4, m = 8;
    int p[] = {0, 1, 2, 5, 6};
    int w[] = {0, 2, 3, 4, 5};
    cout << knapsack(n, m, w, p);

    return 0;
}

Comments

Popular Posts