动态规划作为不同于其他类型的问题,有着它自己的解题思路以及模型,以下将围绕模型以及解题思路两方面进行讲解。

1.模型:有已知推到未知,是我们常用的解题思路,好比数独中如果我们有了1~8那么剩下的格子必然是9了。

动态规划也是这样的思路,眼下我们有一堆货物和一个容量有限的背包,那么如何装才能利益最大化便是我们需要考虑的问题。也就是背包问题。

仔细思考,不难发现,每个物品都只有0与1(0表示不装,1表示装入)两个状态,那么一串二进制数就可以表示物品的装配方案(如0101表示只带上第2、4件物品)由此必有2^n(n件物品)方案

如此枚举时间过于复杂,由此如何优化就成为了需要思考的问题,那么我们继续思考上面解题是枚举装配方案,如果我们能够优化装配判断的条件就可以达到优化的目的。如何判断呢?显然当我们在判断第i件物品时,肯定会选择上一次最佳方案(相同体积价值最高)再加上这一次的成本,也就是说我们当前装入与否取决于我们是否装得下,装不下显然我们跳过,装得下我们就得判断是装入好还是不装入好。

2.解题

有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。

第 i 件物品的体积是 vi,价值是 wi。

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。

输入格式

第一行两个整数N,V,用空格隔开,分别表示物品数量和背包容积。

接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。

输出格式

输出一个整数,表示最大价值。

数据范围

0<N,V≤1000
0<vi,wi≤1000

输入样例

4 5
1 2
2 4
3 4
4 5

输出样例:

8

代码如下:

#include<stdio.h>int n, m;
int f[1001], v, w;int main()
{scanf("%d%d", &n, &m);for(int i = 1; i <= n; i ++){scanf("%d%d", &v, &w);for(int j = m; j >= v; j--)if(f[j]<f[j-v] + w)f[j] = f[j-v] + w;else f[j] = f[j];}printf("%d", f[m]);return 0;
}

C语言描述 动态规划 背包问题相关推荐

  1. 动态规划 NOIP经典问题 开心的金明(洛谷P1060题题解,Java语言描述)

    题目要求 P1060题目链接 分析 经典的0/1背包问题,<背包九讲>中提到的典例. 动态转移方程:f[j]=Math.max(f[j],f[j−v[i]]+w[i])f[j] = Mat ...

  2. 动态规划求解装箱问题(洛谷P1049题题解,Java语言描述)

    题目要求 P1049题目链接 分析 这种题不能贪心,大家都懂的,应该使用DP. 比如容量为7,有三个物品体积是1,2,5,你要是先装小的,就只能装3,剩下4,但实际上可以装的只剩一个. 如果容量为10 ...

  3. 动态规划求解限时采药问题(洛谷P1048题题解,Java语言描述)

    题目要求 P1048题目链接 分析 荐读:大神博文 -> <聊聊动态规划与记忆化搜索> 这题就是一个标准的DP水题,对于不会DP的萌新,太难了!对于整天搞DP的算法大佬,水爆了! 荐 ...

  4. 动态规划求解疯狂的采药问题(洛谷P1616题题解,Java语言描述)

    题目要求 P1616题目链接 分析 参考这篇文章自己做出来的 → Here 我就不讲了. AC代码(Java语言描述) import java.util.Scanner;public class Ma ...

  5. 贪心 or 动态规划 求解“最大字段和”问题(洛谷P1115题题解,Java语言描述)

    题目要求 P1115题目链接 分析 练习DP,势在必行! 状态转移方程:f[i]=max(f[i−1]+n[i],n[i])f[i]=max(f[i-1]+n[i], n[i])f[i]=max(f[ ...

  6. 递归不行就换动态规划(洛谷P1028题题解,Java语言描述)

    题目要求 P1028题目要求 分析 我们可以用递归做,但可能会超时或者超内存.最起码不算好的算法. 那么我们就可以考虑找到递推规律,利用简单的DP处理. 在迭代的时候发现:(i >= 2) i为 ...

  7. 数据结构与算法分析:C语言描述(原书第2版 简体中文版!!!) PDF+源代码+习题答案...

    转自:http://www.linuxidc.com/Linux/2014-04/99735.htm 数据结构与算法分析:C语言描述(原书第2版中文版!!!) PDF+源代码+习题答案 数据结构与算法 ...

  8. 神奇的四次方数(洛谷P1679题题解,Java语言描述)

    题目要求 P1679题目链接 分析 可以使用DP去做,当做"完全背包问题"问题来处理. 初值:f[0]=0f[0]=0f[0]=0 cost[]cost[]cost[] : cos ...

  9. [Catalan]求解随机出栈可能数(洛谷P1044题题解,Java语言描述)

    题目要求 P1044题目链接 分析 题意就是:N个数依次进栈,可随机出栈,算一下可能的出栈序列数. 其实这个就是Catalan啊,如果数据结构与算法有一定的刷题积累的学生应该经常做这样的About栈的 ...

最新文章

  1. python list 查找find_List 泛型 集合中 Find 的用法
  2. 如何在已安装TMG2010服务器上安装Symantec Backup Exec 2010 Remote Agent
  3. Android 抖动提示动画
  4. Java BigInteger类| toByteArray()方法与示例
  5. css中的背景、边框、补丁相关属性
  6. Qt QString to char*
  7. 打印准考证服务器异常显示,注意了!打印准考证时,你可能遇到这些问题!
  8. html添加田字,兆加页(是加三个田是什么字)
  9. 高数·两个重要极限练习
  10. 在48小时内了解智能制造,让你少走弯路
  11. 齿轮-转子-轴承系统动力学matlab程序代码
  12. 数加加众包实习生招募进行中
  13. 音频知识点(12)- P.563 工具编译及使用教程
  14. Picture Collage Maker Mac(图片拼贴软件) 中文激活版
  15. 内部排序算法比较-数据结构C语言课设
  16. Vue中通过配置eslintrc.js文件来解决编译时出现的no-trailing-spaces、no-undef等错误
  17. MSP430F149程序——12864液晶
  18. Pytorch resnet花朵识别(5种花)附完整代码
  19. Linux 和uboot下dd命令读写sd,mmc,mm读写内存命令
  20. 白盒测试技术详细,有例题——软件质量保证与测试

热门文章

  1. 为何安全专家都厌恶 SOA
  2. <四>objectARX开发:扩展数据XData、扩展记录XRecord和有名对象字典NameDict
  3. 使用 Docker 部署 Solo 博客系统
  4. 命运永远掌握在自己手中
  5. TCP和UDP对应的协议分别是什么?
  6. 数据化运营必备的10款工具
  7. videojs播放器插件
  8. 1. HbuliderX-移动端APP开发-前端开发ajax请求失败或错误-常见问题-原因分析-处理
  9. 计算机进制换算方法 ppt,计算机基础数制及其相互转换.ppt
  10. Java Bean解析。什么是Javabean?