hdu 2602 01背包问题

当前容量的最大价值在放与不放中抉择

code:

#include <stdio.h> #include "memory.h" int dp[1005][1005];     int max(int a,int b) {  if(a>b)  {   return a;  }else  {   return b;  } } int main(int argc, char *argv[]) {  int t;  scanf("%d",&t);  int i;  for(i=0;i<t;i++)  {   int n,m;  //物品个数和容量   memset(dp,0,sizeof(dp));    scanf("%d%d",&n,&m);    int i2;    int value[1005];    int w[1005];    for(i2=1;i2<=n;i2++)    {     scanf("%d",&value[i2]);  //输入价值    }    for(i2=1;i2<=n;i2++)    {     scanf("%d",&w[i2]);   //输入容量    }     //----------------------------------------------------------------------

   int j2;    for(i2=1;i2<=n;i2++) //第i2个物品最大价值    {     for(j2=0;j2<=m;j2++) //放第i2个物品在j2容量上的最大价值     {      if(j2-w[i2]>=0)  //能放下该品      dp[i2][j2]=max(dp[i2-1][j2],dp[i2-1][j2-w[i2]]+value[i2]); //放和不放中选取最大价值      else      {       dp[i2][j2]=dp[i2-1][j2];   //不能放下该物品      }     }    }        printf("%d\n",dp[n][m]);  }  return 0; }

 

你可能感兴趣的:(hdu 2602 01背包问题)