Hdu 2602 Bone Collector 非常常规的01背包问题,用一维和二维数组都可以做,一维快相当多。
典型的01背包,如果是刚刚入门的话,推荐看一下背包九讲。
经典的背包九讲:http://love-oriented.com/pack/ 新手必看(可能看不懂,可以打打代码理解理解)
题意很简单就是一个背包问题。
ac代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>//max函数需要的头文件...之前忘了加结果错了...
using namespace std;
struct p{
int price,v;
}a[1005];
int dp[1005];
int main()
{
int T,n,V;
scanf("%d",&T);
while(T--)
{
memset(dp,0,sizeof(dp));
scanf("%d%d",&n,&V);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i].price);
}
for(int i=0;i<n;i++)
{
scanf("%d",&a[i].v);
}
for(int i=0;i<n;i++)
{
for(int j=V;j>=0;j--)
{
if(j<a[i].v) //保证能够放进背包里面
break;
dp[j]=max(dp[j],dp[j-a[i].v]+a[i].price);
}
}
printf("%d\n",dp[V]);
}
return 0;
}