hrbust1558 小背包 (01背包)

HRBUST 1558   01背包   


题目:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1558


分析:1~16个物品,每个物品体积V(1~2012)和价值w(0~2012),dp数组开33005就可以,不用开到400万,01背包基础


#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;

struct beibao{
    int v;
    int val;
}a[20];

int dp[33010];//数组定义成400万会超内存,16*2012=32192
int main(){
    int V,n;
    while(cin >> V >> n){
        V=min(V,33000);
        for(int i=0;i<n;i++)//输入
            cin >>a[i].v >>a[i].val;

        for(int i=0;i<=V;i++)//初始化dp数组
            dp[i]=0;

        for(int i=0;i<n;i++)
            for(int j=V;j>=a[i].v;j--)
                dp[j]=max(dp[j],dp[j-a[i].v]+a[i].val);

        printf("%d\n",dp[V]);
    }
    return 0;
}




你可能感兴趣的:(hrbust1558 小背包 (01背包))