不懂得见算法背包问题详解
代码如下:
#include
struct node
{
int cost;
double wei;
} a[10004];
double min(double a,double b)
{ return a>b? b:a;}
int main()
{
int i,j,n,m;
double dp[10004];
whil...
分类:
其他好文 时间:
2014-07-24 17:44:25
阅读次数:
235
题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方...
分类:
其他好文 时间:
2014-07-23 14:59:46
阅读次数:
318
对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你...
分类:
其他好文 时间:
2014-07-23 14:57:26
阅读次数:
208
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4815
题意:很“内涵”的一个题面,题意是给出N道题,和一个概率P,然后给出每道题对应的得分aa[i](每道题只有两个选项,一个正确一个错误)。两个人来答题,一个人是随机选择答案,问另一个人至少要答多少分才能保证有P的概率不会失败。
思路:是一道DP题,最开始想强行枚举所有情况,找到需要分数,后来发现4...
分类:
其他好文 时间:
2014-07-22 14:26:12
阅读次数:
227
01背包是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即F[i,v] 表示前i 件物品恰放入一个容量为v 的背包可以获得的最大价值。则其状态转移方程便是:
F[i,v]=max(F[i,v],F[i-1,v-w[i]]+v[i])
这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i 件物品放入容量为v ...
分类:
其他好文 时间:
2014-07-22 14:19:44
阅读次数:
170
题意:给你一个给定的现金数量goal,还有你拥有的n种面值的现金。
接下来就是n种面值的现金你各拥有多少张。要你求出不超过给定goal的能用你手上拥有现金凑成的最大值!
思路:多重背包问题,状态方程dp(i,v)=max(dp(i,j),dp(i-1,v-kci)+kwi);
优化后AC代码:
#include
#include
struct p
{
int n;
...
分类:
其他好文 时间:
2014-07-22 00:09:34
阅读次数:
194
上一节,我们讨论了01背包问题,说明了*递归与分治法 与 动态规划DP的区别和联系,介绍了缓存的概念*。以下,我们用DC、DP、cache分别表示分治法、动态规划和缓存。本节,我们讨论01背包的另外两种形似——
完全背包和多重背包问题,分析DP问题的另外一些情况。
例一:完全背包问题
同样有n种价值和重量分别为weight[i] and value[i], 背包大小W。限制条...
分类:
其他好文 时间:
2014-07-21 15:18:15
阅读次数:
295
http://blog.csdn.net/insistgogo/article/details/8579597背包问题九讲笔记_01背包分类:算法导论2013-02-13 09:171752人阅读评论(4)收藏举报摘自Tianyi Cui童鞋的《背包问题九讲》,稍作修改,方便理解。01背包问题描述已...
分类:
其他好文 时间:
2014-07-21 00:28:01
阅读次数:
292
接触动态规划的第一题是数塔问题,第二题就是01背包问题了。当时看的懵懵懂懂,回过头来再看这道题还是非常简单的了。用 dp[i][j] 表示取前i种物品,使它们总体积不超过j的最优取法取得的价值总和状态转移方程:dp[i][j] = max(dp[i-1][j],dp[i-1][j-cost[i]]+...
分类:
其他好文 时间:
2014-07-18 19:00:42
阅读次数:
266
此题就是在01背包问题的基础上求所能获得的第K大的价值。
具体做法是加一维去推当前背包容量第0到K个价值,而这些价值则是由dp[j-w[ i ] ][0到k]和dp[ j ][0到k]得到的,其实就是2个数组合并之后排序,但是实际做法最好不要怎么做,因为你不知道总共有多少种,而我们最多只需要前K个大的就行了(因为可能2个数组加起来的组合数达不到K个),如果全部加起来数组开多大不清楚,所以可以选用...
分类:
其他好文 时间:
2014-07-18 18:14:27
阅读次数:
224