开始背包专题,先从简单的来吧
如题:http://acm.hdu.edu.cn/showproblem.php?pid=2602
fori=1..N
forv=V..c[i]
f[v]=max{f[v],f[v-c[i]]+w[i]}
一维数组的状态转移方程
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MN 1002
#define MV 1002
#define max(a,b)(a>b?a:b)
int c[MN];
int w[MN];
int f[MV];
int T;
int N,V;
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&N,&V);
int i,j;
for(i=1;i<=N;i++)
scanf("%d",&w[i]);
for(i=1;i<=N;i++)
scanf("%d",&c[i]);
memset(f,0,sizeof(f));
for(i=1;i<=N;i++)
for(j=V;j>=c[i];j--)
f[j]=max(f[j-c[i]]+w[i],f[j]);
printf("%d\n",f[V]);
}
}