DHU 2602(01背包)

http://acm.hdu.edu.cn/showproblem.php?pid=2602

本来想小复习一下,没想到居然被虐。。。

开始用的二维,没有化,一直WA

修改后的代码

二维:

#include
#include
#include
using namespace std;
__int64 dp[1001][1001];
int W[1001],V[1001];
int main()
{
int CASE,i,j;
int Sum,bag;
cin>>CASE;
while(CASE--)
{
cin>>Sum>>bag;
for(i=1;i<=Sum;i++)
cin>>V[i];
for(i=1;i<=Sum;i++)
cin>>W[i];
memset(dp,0,sizeof(dp));
for(i=1;i<=Sum;i++)
for(j=0;j<=bag;j++) //从0开始,有的骨头没体积,有价值。无语
{
if(j>=W[i]&&dp[i-1][j]1][j-W[i]]+V[i])

dp[i][j]=dp[i-1][j-W[i]]+V[i];
else
dp[i][j]=dp[i-1][j];

}
printf("%d\n",dp[Sum][bag]);



}
return 0;

}

一维:

#include
#include
#include
using namespace std;
int dp[1001];
int W[1001],V[1001];
int main()
{
int CASE,i,j;
int Sum,bag;
cin>>CASE;
while(CASE--)
{
cin>>Sum>>bag;
for(i=1;i<=Sum;i++)
cin>>V[i];
for(i=1;i<=Sum;i++)
cin>>W[i];
memset(dp,0,sizeof(dp));
for(i=1;i<=Sum;i++)
for(j=bag;j>=W[i];j--)
{
dp[j]=max(dp[j],dp[j-W[i]]+V[i]);

}
printf("%d\n",dp[bag]);



}
return 0;

}




转载于:https://www.cnblogs.com/sdau10kuaile/archive/2011/12/21/2295341.html

你可能感兴趣的:(php)