用d(i,j)表示当前在第i层,背包剩余容量为j时接下来的最大重量和
一共有n个物品,i不代表已经选取的物品数量,而是遍历过的物品数量
d(i,j)d(i,j)d(i,j)代表剩余背包重量为j时,正在对物品i进行选取时,当前情况所可能达到的最大权重;
d(i.j)=max(d(i+1,j),d(i+1,j−w[i])+v[i]))d(i.j)=max(d(i+1,j),d(i+1,j-w[i])+v[i]))d(i.j)=max(d(i+1,j),d(i+1,j−w[i])+v[i]))
从决策过程的转移来看:
d(i+1,j)d(i+1,j)d(i+1,j)代表我们在遍历到物品iii的时候,并不选取它,所以剩余重量就没有变,状态变为遍历i+1i+1i+1个物品;
d(i+1,j−w[i])+v[i]d(i+1,j-w[i])+v[i]d(i+1,j−w[i])+v[i]我们在遍历到物品iii的时候,选取它加入背包,所以剩余重量jjj就要减去物品iii的重量w[i]w[i]w[i], 当前可能最大权重加上物品iii的权重v[i]v[i]v[i];

从计算的顺序过程来看:
我对刘汝佳的代码做了一点修改

for(int i = n; i >= 0; i——)for(int j = 0; j <= C; j++){if(i==n)d[i][j]=0;elseif(j >= w[i]) d[i][j]=max(d[i+1][j],d[i+1][j-w[i]]+v[i]);
}

先算的是d(n,j)d(n,j)d(n,j),注意,代码里面i有n+1个,物品编号从零开始,i=ni=ni=n时,代表所有n个物品都已经遍历完但是一个都不选时的情况,初始要将其设为0;
之后从下往上遍历,所以计算的时候是先算后来的情况。

对于jjj从0开始采取滚动数组时,如果不仅仅要求输出最大权重,也要输出最大权重时的重量的话
对于代码

memset(f, 0, sizeof(f));
for(int i = 1; i <= n; i++){scanf("%d%d", &V, &W);for(int j = C; j >= 0; j——)if(j >= V) f[j] = max(f[j], = f[j-V]+W);
}

会出现多个最大重量都有最大权重的情况,j&gt;max(w)j&gt;max(w)j>max(w) 时只看f(j)f(j)f(j)是没有问题的;
但是想得到准确的www,会混入超过的情况

所以需要

memset(f, -1, sizeof(f));
f[0]=0;

坑了我几个小时

刘汝佳0-1背包的一些笔记相关推荐

  1. 刘汝佳《算法竞赛入门经典》---总结

    刘汝佳:<算法竞赛入门经典> 三步: 基本的数据结构+算法知识: 数论等数学基本知识: 锻炼联想建模能力.知识与实际相结合,解决实际问题! 第一章:程序设计入门 1.a/b 当a.b为整数 ...

  2. 【刘汝佳代码详解】例题6-4破损的键盘(Broken Keyboard,UVa 11988)

    立志用最少的代码做最高效的表达 You're typing a long text with a broken keyboard. Well it's not so badly broken. The ...

  3. 算法竞赛入门经典(刘汝佳)——代码笔记

    Reference: <算法竞赛入门经典>(刘汝佳)第一版.第二版 ------------------------------------------------------------ ...

  4. 刘汝佳紫书 uva1592

    刘汝佳上传的代码没耐心看...就大致照着书上写的思路写了一个...一开始发现全写错了耗了半天... 定义一个pair,这个pair里有存两个队,字符串对和int对.每每读入一行的时候看看map中是否存 ...

  5. 刘汝佳《算法竞赛入门经典(第二版)》习题(三)

    刘汝佳<算法竞赛入门经典(第二版)>第三章习题(一) 习题3-1 得分(ACM/ICPC Seoul 2005,UVa1585) 给出一个由O和X组成的串(长度为1~80),统计得分.每个 ...

  6. 刘汝佳《算法竞赛入门经典(第二版)》习题(六)

    刘汝佳<算法竞赛入门经典(第二版)>第四章习题(4-1~4-3) 习题4-1 象棋(Xiangai,ACM/ICPC Fuzhou 2011,UVa1589) 考虑一个象棋残局,其中红方有 ...

  7. 提取了下刘汝佳推荐的题号...

    今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started    10055 - Hashmat the Brave Warrior ...

  8. 【刘汝佳】习题3-1 UVA1585

    刘汝佳 <算法竞赛入门经典(第二版)>第三章习题 3-1 习题3-1 得分(ACM/ICPC Seoul 2005,UVa1585) 给出一个由O和X组成的串(长度为1~80),统计得分. ...

  9. 刘汝佳《算法竞赛入门经典(第二版)》习题(二)

    刘汝佳<算法竞赛入门经典(第二版)>第二章习题 目录 刘汝佳<算法竞赛入门经典(第二版)>第二章习题 习题2-1 水仙花数 习题2-2 韩信点兵 习题2-3 倒三角形 习题2- ...

最新文章

  1. 如何使用Intel vtune profilier?
  2. 类和对象—对象特性—拷贝构造函数调用时期
  3. 关于精密空调,你需要了解的都在这里!
  4. boost::safe_numerics模块实现相等的constexpr的测试程序
  5. Qt CMake命令参考
  6. 微信小程序 详解 小程序支付
  7. 计算机技术证明数学定理,数学要项定理公式证明辞典
  8. 第三章 PCB 封装库绘制
  9. 二维傅里叶变换简化方式
  10. 句法结构中的语义分析
  11. 非常详细的STM32 CAN通信的贴子,从总线细节到编程实现
  12. java写足球游戏_月光软件站 - 编程文档 - Java - 足球战术之flyweight篇
  13. PR标题动画模板 创意动态多行标题注释字幕条pr模板
  14. [转].NET开发邮件发送功能的全面教程(含邮件组件源码)
  15. 中文数字文字转换成阿拉伯数字
  16. Vue脚手架、镜像源下载及使用
  17. js 生成条形码例子
  18. MediaPlayer的消息机制分析
  19. PHP汉字转拼音的两种方法+PHP提取汉字(中文)方法
  20. java基于springboot+Vue+nodejs的高校运动会报名管理系统 element

热门文章

  1. 【Java】GUI界面聊天小程序(基于Socket的客户端服务端通信)
  2. Forrester权威专家告诉你:欺诈与反欺诈5日谈
  3. PhotonServer教程《一》
  4. XML简单操作类、只可操作单行数据(可直接使用)
  5. PPOS详情页布局加载和优化
  6. Unity 3D : RAW 10 bit 轉 RGB ( GPU 版 ) [ 新版本 2 ]
  7. java 反射private_java使用反射强制给private字段赋值
  8. linux ntpdate 更新时间,Linux时间同步:ntpd,ntpdate
  9. NC65 单据实现导入导出Excel按钮的添加配置
  10. 在eclipse中写java项目,简单使用hsqldb数据库--菜鸟教程