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;
}