01背包问题

背包容量为10
五个物品
价值:8,10,9,5,5
重量:3,6,5,2,3

#include<stdio.h>
#include<stdlib.h>

int max(int a,int b)
{
    return a>b?a:b;
}
int main()
{
   int value[6]={0,8,10,9,5,5};
   int weight[6]={0,3,6,5,2,3};
   int i,j;
   int dp[6][11]={0};
   for(i=1;i<6;i++)
   {
       for(j=1;j<11;j++)
       {
           if(weight[i] > j)
           {
               dp[i][j]=dp[i-1][j];
           }
           else
            {
                int v1=dp[i-1][j-weight[i]]+value[i];
                int v2=dp[i-1][j];
                if(v1 > v2)
                    dp[i][j]=v1;
                else
                    dp[i][j]=v2;
            }
       }
   }
    for(i=1;i<6;i++)
    {
        for(j=1;j<11;j++)
        {
            printf("%3d",dp[i][j]);
        }
        printf("\n");
    }

    return 0;
}

01背包问题解决辅助

01背包问题