18705 01背包问题
时间限制:1000MS 代码长度限制:10KB
题型: 编程题 语言:不限定
Description
有一个容积为M的背包和N件物品。第i件物品的体积W[i],价值是C[i]。求解将哪些物品装入背包可使价值总和最大。每种物品只有一件,可以选择放或者不放入背包。
输入格式
第一行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30);
第2~N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。
输出格式
一个数,表示最大总价值。
输入样例
10 4
2 1
3 3
4 5
7 9
输出样例
12
问题分析:
01背包问题属于经典的动态规划问题,可以先“作一个表”,其中逐个递推,寻找在不同的背包容量下的最优解,最后推得所求容量背包能够装入的最大价值。
代码实现:
#include<iostream>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
int wupin[31][2];
int beibao[31][201];
for(int i=1;i<=n;i++)
{
cin>>wupin[i][0]>>wupin[i][1];
}
for(int i=0;i<=m;i++)
{
beibao[0][i]=0;
}
for(int i=1;i<=n;i++)//第i件物品
{
for(int j=1;j<=m;j++)//空间为j
{
if(j<wupin[i][0])
{
beibao[i][j]=beibao[i-1][j];
}
else
{
beibao[i][j]=max(beibao[i-1][j],beibao[i-1][j-wupin[i][0]]+wupin[i][1]);
}
}
}
cout<<beibao[n][m]<<endl;
return 0;
}
标签:01,18705,int,31,wupin,背包,SCAU
From: https://blog.csdn.net/2301_79586308/article/details/139159503