class Knapsack{
int volume;
int dp[][];
int knap(int v, int[]array)
{
volume=v;
int n=array.length;
dp=new int[n][v+1];
for(int i=0;i<n;i++)
{
for(int j=0;j<v+1;j++)dp[i][j]=-1;
}
for(int i=1;i<=v;i++)
{
if(array[0]<=i)dp[0][i]=array[0];
else dp[0][i]=0;
}
if(array[0]==1)dp[0][1]=1;
else dp[0][1]=0;
for(int i=1;i<n;i++)
{
if(dp[i-1][1]==1 || array[i]==1)dp[i][1]=1;
else dp[i][1]=0;
}
return knapsack(array, n-1, volume, dp);
}
int knapsack(int[]array, int i, int v, int[][]dp)
{
if(v<0)return Integer.MIN_VALUE;
if(i<0)return 0;
if(dp[i][v]!=-1)return dp[i][v];
int value1=knapsack(array, i-1, v-array[i], dp)+array[i];
int value2=knapsack(array, i-1, v, dp);
dp[i][v]=Math.max(value1, value2);
return dp[i][v];
}
}
Knapsack 问题
最新推荐文章于 2024-08-08 00:32:29 发布