c++-0-1背包问题(动态规划)

问题描述

0-1背包问题(动态规划)

代码敲出来了但是提交是错的,我也不知道为什么了,题目和代码都在下面,帮我看看吧!!!

题目如下:

Problem Description

给定n种物品和1个背包,物品i的重量是wi,其价值为vi,背包的容量为C。要求选择装入背包的物品,使得装入背包中物品的总价值最大。

Input

每组测试数据包含3行,第1行为n和c,表示有n(0<=n<=400)个物品且背包容量为c (c<=1500),第二行为这n个物品的重量wi(1<=wi<=1000),第三行为这n个物品的价值vi。背包容量和物品重量都为整数。

Output

输出装入背包的最大总价值,每个答案一行。

Sample Input
5 10
2 2 6 5 4
6 3 5 4 6
Sample Output
15

代码如下:
#include
using namespace std;
int MAX(int a,int b)
{
return a>b?a:b;
}
int main()
{
int n,m;
while(cin>>n>>m)
{
int i,v[500],w[500],x[500][2000];
for(i=1;i<=n;i++)
{
cin>>w[i];
}
for(i=1;i<=n;i++)
{
cin>>v[i];
}
fill(&x[0][0],&x[n][m]+1,0);
int o=0;
for(i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(j>=w[i])
{
x[i][j]=MAX(x[i-1][j],x[i-1][j-w[i]]+v[i]);
}
else
x[i][j]=x[i-1][j];
if(x[i][j]>o)
o=x[i][j];
}
}
cout<<o<<endl;
}
return 0;
}

解决方案

动态规划:0/1背包问题
1、问题简介
2、方法
???? 动态规划,主要用到的公式见下面(符号意思见代码处解释)
3、详细代码实现
4、效果截屏

3、解决代码
// 动态规划法求0/1背包问题
// by 孙琨SealSun at UCAS
// 2015.11.19
#include
using namespace std;
#define MAX 256......
答案就在这里:动态规划:0/1背包问题

解决方案二:

你确认if那写的是0而不是字母o?

时间: 2024-11-01 03:45:32

c++-0-1背包问题(动态规划)的相关文章

第十六章 贪心算法——0/1背包问题

 1.问题描述:      给定n种物品和一背包.物品i的重量是wi,其价值为vi,背包的容量为C.问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大?      形式化描述:给定c >0, wi >0, vi >0 , 1≤i≤n.要求找一n元向量(x1,x2,-,xn,), xi∈{0,1}, ∋ ∑ wi xi≤c,且∑ vi xi达最大.即一个特殊的整数规划问题.        2.最优性原理:      设(y1,y2,-,yn)是 (3.4.1)的一个最优解.则(y

物件捆绑 背包问题 动态规划 求解

物件捆绑背包问题:给定N元钱,要购买一些器件.器件有主件和附件之分,也即主件可以单独购买,然而购买附件必须购买对应的主件.下表就是一些主件与附件的例子: 主件 附件 电脑      打印机.扫描仪 书柜 图书 书桌          台灯 工作椅 无   把每件物品规定一个重要度,分为5等:用整数1~5表示,第5等最重要.在花费不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大.设第j件物品的价格为v[j],重要度为p[j],共选中了k件物品,编号依次为j1,j2,--

动态规划法:背包问题

一 几个概念: 最优化问题:有n个输入,它的解由这n个输入的一个子集组成,这个子集必须满足某些事先给定的条件,这些条件称为约束条件,满足约束条件的解称为问题的可行解.满足约束条件的可行解可能不止一个,为了衡量这些可行解的优劣,事先给出一定的标准,这些标准通常以函数的形式给出,这些标准函数称为目标函数,使目标函数取得极值的可行解成为最优解,这类问题称为最优化问题. 二 最优性原理: 对于一个具有n个输入的最优化问题,其求解的过程往往可以划分为若干个阶段,每一个阶段的决策仅依赖前一阶段的状态,由决策

背包问题

P01: 01背包问题 题目:有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路:这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放.用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值.则其状态转移方程便是: f[i][v] = max{ f[i-1][v], f[i-1][v-c[i]] + w[i]} 这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生

【算法导论】贪心算法之背包问题

        在讨论贪心算法时,我们先了解贪心算法与动态规划之间的区别与联系,后面我们将发现可以用0.1背包问题和部分背包问题来比较贪心算法和动态规划的关系.         我们知道,对于一个最优解问题,贪心算法不一定能够产生一个最优解.因为,如果想要采用贪心算法得到最优解需要满足两个条件:贪心选择性质.最优子结构.         贪心选择性质:一个全局最优解可以通过局部最优解来得到.that is to say,当考虑如何做选择时,我们只考虑对当前问题最佳的选择而不考虑子问题的结果.  

C++动态规划之背包问题解决方法_C 语言

本文实例讲述了C++动态规划之背包问题解决方法.分享给大家供大家参考.具体分析如下: 问题描述: 背包的最大容量为W,有N件物品,每件物品重量为w,价值为p,怎样选择物品能使得背包里的物品价值最大? 输入:10 3   (W,N) 4 5   (w,p) 6 7   (w,p) 8 9   (w,p) 实现代码: #include <stdio.h> #define THING 20 #define WEIGHT 100 int arr[THING][WEIGHT]; /* 背包容量为weig

PHP贪婪算法解决0-1背包问题实例分析_php技巧

本文实例讲述了PHP贪婪算法解决0-1背包问题的方法.分享给大家供大家参考.具体分析如下: 贪心算法解决0-1背包问题,全局最优解通过局部最优解来获得!比动态规划解决背包问题更灵活! //0-1背包贪心算法问题 class tanxin{ public $weight; public $price; public function __construct($weight=0,$price=0) { $this->weight=$weight; $this->price=$price; } }

hdu 2955 Robberies(0/1背包)

点击打开链接hdu 2955 思路: 0/1背包 分析: 1 按照题目的意思我们很容易知道这就是一个0/1背包问题,如果我们把概率当作是背包的容量,那么我们遇到一个问题就是浮点数的dp,因为题目没有告诉我们小数点具体几位,那么我们就不能够通过乘上10^n来转化为整数,所以我们应该考虑换种思想 2 按照正常的思路是dp[i][j]表示前i个物品放入概率为j的最大价值,那么我们这边把价值当成背包来看的话我们设dp[i][j]表示前i个物品放入金钱为j的最小被抓概率(因为题目不好求最小概率我们可以认为

c语言-帮忙看个背包问题,输入数据不成功

问题描述 帮忙看个背包问题,输入数据不成功 #include"stdio.h" #include"iostream" #define M 20 typedef struct node{ int weight; int price; int flag; }Node; typedef struct knap { Node a[M]; int total; int size; }*Knap; int f(Knap k) { int index=-1; int mp=0;