您的位置:首页 > 其它

HDOJ1864背包问题.

2011-10-06 01:22 274 查看
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2602

#include<stdio.h>

#include<stdlib.h>

#include<iostream>

#include<math.h>

#include<string.h>

const int inf = 0x3f3f3f;

using namespace std;

int test,dp[1001],n,v,value[1001],weight[1001];

int main()

{

while(scanf("%d",&test) != EOF)

{

while(test--)

{

scanf("%d%d",&n,&v);

for(int i = 1 ; i <= n ; i++)

scanf("%d",&value[i]);

for(int i = 1 ; i <= n ; i++)

scanf("%d",&weight[i]);

memset(dp,0,sizeof(dp));

// for(int i = 1 ; i <= n ; i++)

// {

// for(int j = 0 ; j <= v ; j++)//尼玛啊..j=0和j=1不是一样的么.擦..!!!

// {

// if(j >= weight[i])

// dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]);

// else

// dp[i][j] = dp[i-1][j];

// }

// }

//学习第二种优化空间的算法做法:

if(v)

{

for(int i = 1 ; i <= n ; i++)

{

for(int j = v ; j >= 0 ; j--)

{

if(j >= weight[i])

dp[j] = max(dp[j],dp[j-weight[i]]+value[i]);

}

}

}

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

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: