HDOJ1864背包问题.

来源:互联网 发布:免费书旗软件下载 编辑:程序博客网 时间:2024/05/29 04:32

题目连接: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]);
        }
    }
}
原创粉丝点击