#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
int dp[1001][1001];//有时候放到外面成为全局变量就不会出现栈溢出的错误了。
int x[1001];//价值
int y[1001];//体积
int max(int a,int b)
{
if(a < b)
return b;
else
return a;
}
int main()
{
int T,n,v,i,j;
scanf("%d",&T);
while(T--)
{
memset(dp,0,sizeof(dp));//因为题目的要求可以是不全装满,所以可以初始化要为0
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
scanf("%d%d",&n,&v);
for(i=1;i<=n;i++)
{
scanf("%d",&x[i]);//输入价值
}
for(i=1;i<=n;i++)//最好从一开始,这样就能够和后面的输出统一
{
scanf("%d",&y[i]);//输入体积
}
for(i=1;i<=n;i++)//每个价值在任何体积下都要算一下
{
for(j=0;j<=v;j++)//题目的要求可以是不全装满
{
if(j >= y[i])//如果可以可以装进去
{
dp[i][j] = max(dp[i-1][j],dp[i-1][j-y[i]]+x[i]);//本题的dp方程
}
else//在这个体积下不能再装进去
{
dp[i][j] = dp[i-1][j];//注意这里的j还是不变的,并且这一步是不能缺少的;
}
}
}
printf("%d\n",dp[n][v]);
}
return 0;
}
HDU2602二维
最新推荐文章于 2015-08-12 15:53:57 发布