实验三 动态规划实验拓展
第1关:聪明的寻宝人
题目描述:
本关任务:计算寻宝人所能带走的宝物的最大价值。
一个寻宝人在沙漠中发现一处神秘的宝藏,宝藏中共有n个宝物(n不超过20),每个宝物的重量不同,价值也不同,宝物i的重量是wi,其价值为vi。
寻宝人所能拿走的宝物的总重量为m(m不超过50)。请帮助寻宝人写一个程序,计算寻宝人能够获得的最大总价值。
相关知识
无
编程要求
在右侧编辑器中有一个函数MaxValue,它有四个参数values,weights,n,m。
values和weights分别存放了n件宝物的价值和重量,m为寻宝人所能携带的最大重量。
请在这个函数中补充代码,计算并输出寻宝人所能获得的最大总价值。
输入数据由评测系统读取,并传递给MaxValue函数。具体见测试说明。
测试输入:
3 10
3 4
4 5
5 6
预期输出:
11
分析:
没什么难度,就是一个0-1背包问题。
代码实现:
#include <iostream>
using namespace std;
void MaxValue(int values[],int weights[],int n,int m)
{
/********** Begin **********/
//补充代码完成任务
int b[n][m+1];
for(int i=0;i<n;i++){
b[i][0]=0;
for(int j=1;j<m+1;j++){
if(i==0){
if(j>weights[i]){
b[i][j]=values[i];
}
else{
b[i][j]=0;
}
}
else{
if(j<weights[i]){
b[i][j]=b[i-1][j];
}
else{
b[i][j]=b[i-1][j-weights[i]]+values[i]>b[i-1][j]?b[i-1][j-weights[i]]+values[i]:b[i-1][j