题目描述
有个背包可承受重量N,现有T件物品,每件物品重量为Wi,价值为Vi ,每件物品只有一个,这个背包可以装载物品的最大价值是多少?
输入格式
第一行,两个整数,分别表示N和T,用空格隔开(N≤1000,T≤100)
接下来T行,每行两个整数,分别表示T件物品的重量Wi和价值Vi(1≤Wi,Vi≤100)
输出格式
一行,表示这个背包可以装载物品的最大价值
输入输出样例
输入样例1:
100 5 77 92 22 22 29 87 50 46 99 90
输出样例1:
133
【耗时限制】1000ms 【内存限制】256MB
注:此题为01背包模板,
请务必牢记!!!
代码:
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<sstream>
#include<cstdio>
#include<algorithm>
#include<limits.h>
#include<time.h>
using namespace std;
int dp[1086][1086];
int w[10086],v[10086];
int main()
{
int n,t;
cin>>n>>t;
for(int i=1;i<=n;i++)
{
cin>>w[i]>>v[i];
}
for(int i=1;i<=t;i++)
{
for(int j=1;j<=n;j++)
{
if(w[i]>j)
{
dp[i][j]=dp[i-1][j];
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);
}
}
}
cout<<dp[t][n];
return 0;
}