#include <iostream>
using namespace std;
int m[1001][1001]={0};
void beibao(int n,int v,int c[],int w[])
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=v;j++) //i表示物品种类,j表示背包容量
{
if(c[i]<=j) //如果容量小于背包容量,j是变化的,只有j是每个物品容量时才有意义,而t是表示背包剩余容量
{
int t=j-c[i];
if(m[i-1][j]>m[i-1][t]+w[i])
m[i][j]=m[i-1][j]; //数组m表示价钱,数组c表示物品容量,数组w表示物品价值,m数组中的价钱是由w数组给的
else
m[i][j]=m[i-1][t]+w[i];
}
else m[i][j]=m[i-1][j];
}
}
int main()
{
int n,v,i,k,c[1001],w[1001];
cin>>k;
while(k--)
{
cin>>n>>v;
for(i=1;i<=n;i++)cin>>c[i];
for(i=1;i<=n;i++)cin>>w[i];
memset(m,0,sizeof(m));
beibao(n,v,c,w);
cout<<m[n][v]<<endl;
}
return 0;
}
二维数组实现0-1背包
最新推荐文章于 2023-05-22 15:38:22 发布