JustPaste.it

#include <stdio.h>
int n, W, w[10], v[10], V[10][10], x[10];
int max(int a, int b) 
{
    if(a>b)
        return a;
    else
        return b;
}

void knapsack() 
{
    int i, j;
    for (i = 0; i <= n; i++) 
    {
        for (j = 0; j <= W; j++) 
        {
            if (i == 0 || j == 0) 
            {
                V[i][j] = 0;
            } 
            else if (j < w[i]) 
            {
                V[i][j] = V[i - 1][j];
            } 
            else 
            {
                V[i][j] = max(V[i - 1][j], V[i - 1][j - w[i]] + v[i]);
            }
            printf("%d\t", V[i][j]);
        }
        printf("\n\n");
    }
}

void printsolution() 
{
    int i = n, j = W;
    while (i != 0 && j != 0) 
    {
        if (V[i][j] != V[i - 1][j]) 
        {
            x[i] = 1;
            j = j - w[i];
        } 
        else 
        {
            x[i] = 0;
        }
        i--;
    }
}

int main() 
{
    int i;
    printf("Enter number of objects\n");
    scanf("%d", &n);
    printf("Enter knapsack capacity\n");
    scanf("%d", &W);
    printf("Enter weights of the objects\n");
    for (i = 1; i <= n; i++) 
    {
        scanf("%d", &w[i]);
    }
    printf("Enter profits of the objects\n");
    for (i = 1; i <= n; i++) 
    {
        scanf("%d", &v[i]);
    }
    knapsack();
    printsolution();
    printf("Object\tWeight\tProfit\n\n");
    for (i = 1; i <= n; i++) 
    {
        if (x[i] == 1) 
        {
            printf("%d\t%d\t%d\n\n", i, w[i], v[i]);
        }
    }
    printf("Maximum Profit is %d\n", V[n][W]);
    return 0;
}