动态规划-完全背包(1)
来源:互联网 发布:哑铃健身软件2015 编辑:程序博客网 时间:2024/05/22 11:45
01背包说白了就是一个物品放还是不放的问题,然后一个一个往下推下去,这种决策使得问题变得更加的简单便捷。
和01背包相同的还有完全背包,所谓的完全背包,就是01背包的物品不限制个数,可以放置任意件。
完全背包题目的做法跟01背包是相同的,只是多了一个数量的问题。
使用我们oj上的采药,这次是采药2
我们继续列上次那样的表,草药编号1~5,背包是m的重量。重量从0开始,一直是增加的,只要增加量不超过背包的总重量即可。
1.第一株草药,重77,价值92,0到76为0,77到100为92
2.第二株草药,重33,价值50,0到32为0,33到65为50,66到98为100,99和100为150
这样的话,每一株草药是否采摘还是和上一株草药的数值有关。
设价值是c[n][m],草药的重量w[n],价值v[n]。
可以找出表达式:
c[n][m] = max(c[n-1][m], c[n-1][m-w[n]*k]+v[n]*k) k是m/w所得出的结果
根据上面的表达式可以写出这个题的代码,直接贴上
<span style="font-size:18px;">#include <stdio.h>#define max(a,b) a>b?a:bint main(){ int c[1001] = {0}; int w[1000], v[1000]; int m, n, i, j, l, k; scanf("%d %d", &m, &n); for(i=0; i<n; i++){ scanf("%d %d", &w[i], &v[i]); } for(j=0; j<n; j++){ for(l=0; l<=m; l++) if(l >= w[j]) c[l] = max(c[l], c[l-w[j]]+v[j]); } printf("%d\n", c[m]); return 0;}</span>
0 0
- 动态规划-完全背包(1)
- 完全背包(动态规划)
- 完全背包(动态规划)
- 动态规划-----完全背包
- 完全背包---动态规划
- 【动态规划】完全背包
- 动态规划--背包问题(0-1背包,完全背包,多重背包)
- nyoj--311--完全背包(动态规划,完全背包)
- 动态规划总结(01背包 完全背包 多重背包)
- 动态规划初步( 01 背包、完全背包、多重背包)
- 动态规划背包算法(01背包和完全背包)
- 动态规划-完全背包(2)
- hiho 完全背包(动态规划)
- nyoj311 完全背包(动态规划)
- 动态规划(完全背包的变形)
- Piggy-Bank (完全背包 动态规划)
- [算法]动态规划 0-1背包 完全背包
- 动态规划学习之0-1背包和完全背包
- 算法学习---求数组中的最大数
- Codeforces Round #290 (Div. 2)C. Fox And Names(拓扑排序)
- 多线程之ThreadFactory
- (转载)uva题目难度分级列表
- Matlab中实现函数的符号变量
- 动态规划-完全背包(1)
- shell退出,返回小结
- leetcode :twoSum
- filter启动错误,整个web应用也会启动失败。
- MySQL的备份与还原
- Button记录
- poj2010
- 蓝桥杯 第39级台阶 dfs
- jndi调用时,各种应用服务器InitialContext的写法