背包专题

背包吼哇!

基础的背包分为OI01背包,完全背包,多重背包,二维背包,分组背包,树形背包,求方案数等..........

作为DP的一个基础部分还是有必要写一写的。

01背包:

一个物品能取1次。

设f[i][j]表示i物品j体积的最大权值,则状态转移方程:

f[i][j] = max(f[i - 1][j], f[i - 1][j - c[i]] + v[i]);

优化掉物品那一维:

for i 1...n

  for j V...c[i]

    f[j] = max(f[j], f[j - c[i]] + v[i]);

完全背包:

物品能取任意多次。

状态同上。

for i 1...n

  for j c[i]...V

    f[j] = max(f[j], f[j - c[i]] + v[i]);

多重背包:

一个物品可取若干次。

处理方法:

  • 拆成01背包(过水)
  • 二进制拆分(不会)
  • 单调队列优化(上课讲了,没听懂...)

分组背包:

物品被分成若干组,每组只能选择至多1个。

状态:f[i][j]表示i组j体积的最大权值。

循环 + 状态转移方程:

for i 1...g

  for j V...g[i].min_c

    for k g[i].s...g[i].t

      if(j >= c[k])

        f[j] = max(f[j], f[j - c[k]] + v[k]);

二维背包:

费用限制为二维。

此时我们只需要把状态加一维即可解决。

for i 1...n

  for jA VA...cA[i]

    for jB VB...cB[i]

      f[jA][jB] = max(f[jA][jB], f[jA - cA[i]][jB - cB[i]] + v[i]);

可行性完全背包:

可以用bitset解决

树形背包:

本质是分组背包。把子节点的不同体积看做组内不同物品。

例题:洛谷P2014 选课

 #include <cstdio>
#include <algorithm> const int N = ; struct Edge {
int nex, v;
}edge[N]; int top; int e[N], v[N], f[N][N], n, m, root; inline void add(int x, int y) {
top++;
edge[top].v = y;
edge[top].nex = e[x];
e[x] = top;
return;
} void DFS(int x) {
for(int i = e[x]; i; i = edge[i].nex) {
int y = edge[i].v;
DFS(y);
// cal
for(int j = m; j >= ; j--) { // 0 1 pack
for(int k = ; k <= j; k++) {
f[x][j] = std::max(f[x][j], f[x][j - k] + f[y][k]);
}
}
}
if(x != root) {
for(int i = m; i >= ; i--) {
f[x][i] = f[x][i - ] + v[x];
}
}
return;
} int main() {
scanf("%d%d", &n, &m);
root = n + ;
for(int i = , x; i <= n; i++) {
scanf("%d%d", &x, &v[i]);
add(x ? x : root, i);
}
DFS(root);
printf("%d", f[root][m]);
return ;
}

AC代码

注意要倒序循环V的理由是这是01背包,一个物品只能取一次。

Pack的更多相关文章

  1. Html Agility Pack 解析Html

    Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面  用Fir ...

  2. WPF中的Pack URI

    更多资源:http://denghejun.github.io 问题 说来也简单:首先,我在WPF项目中建立了一个用户自定义控件(CustomControl),VS模板为我们自动生成了 CustomC ...

  3. SQL Server 2008 R2 升级到 Service Pack 3后Report Builder启动不了

    一同事将测试服务器从SQL Server 2008 R2 SP2升级到了SQL Server 2008 R2 SP3后发现Report Service的报表编辑时启动不了Report Builder, ...

  4. SQL Server 2008 R2 Service Pack 3 已经发布

    微软SQL Server Product Team在9月26号官方博客宣布,Microsoft SQL Server 2008 R2 Service Pack 3 (SP3)正式发布了 .具体信息可以 ...

  5. [PHP][位转换积累]之pack和unpack

    一.前面的话 PHP的pack和unpack提供了为一系列数据打包(pack)和解包(unpack)成2进制流的功能,这个功能在面向字节的字符串处理和套接字的编程环境中尤为适用. 在了解这两个函数之前 ...

  6. RAD Studio 2009-10Seattle IDE Fix Pack 5.94

    IDE Fix Pack 5.94 IDE Fix Pack is a collection of unofficial bug fixes and performance optimizations ...

  7. Windows Internal Database Service Pack 4 x64 Edition (KB2463332)安装失败

    系统是Windows Server 2008 R2,补丁Windows Internal Database Service Pack 4 x64 Edition (KB2463332)总是安装失败,W ...

  8. [转]struct.pack 用法手记

    原文:http://hi.baidu.com/tibelf/item/8b463d15edfdf10bd1d66d83 看到在进行c格式的二进制文件读取的过程中,用到了struct.unpack方法, ...

  9. PHP: 深入pack/unpack

    https://my.oschina.net/goal/blog/195749 PHP作为一门为web而生的服务器端开发语言,被越来越多的公司所采用.其中不乏大公司,如腾迅.盛大.淘米.新浪等.在对性 ...

  10. #pragma pack(push,1)与#pragma pack(1)的区别

    这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n)             作用:C编译器将按照n个字节对 ...

随机推荐

  1. gitbook 入门教程之使用 gitbook.com 在线开发电子书

    gitbook 官网是官方提供的图书托管的在线平台,分为新版官网(需要FQ) https://www.gitbook.com/ 和旧版官网(无需FQ) https://legacy.gitbook.c ...

  2. Linux垃圾清理

    一.删除缓存 1,非常有用的清理命令:sudo apt-get autoclean                清理旧版本的软件缓存sudo apt-get clean                ...

  3. 4.13Python数据处理篇之Matplotlib系列(十三)---轴的设置

    目录 目录 前言 (一)设置轴的范围 1.同时对于x,y轴设置 2.分别对与x,y轴的设置 (二)设置刻度的大小 1.普通的刻度设置 2.添加文本的刻度设置 3.主副刻度的设置 (三)设置轴的数据 1 ...

  4. SQLServer之删除触发器

    删除触发器 注意事项 可以通过删除DML触发器或删除触发器表来删除DML触发器. 删除表时,将同时删除与表关联的所有触发器. 删除触发器时,会从 sys.objects.sys.triggers 和 ...

  5. python打印电脑串口的信息

    # -*- coding:utf-8 -*- from serial.tools.list_ports import comports port_list = list(comports()) if ...

  6. 0106笔记--vc2012 打印堆栈

    清空icound 菜单 调试-->选项和设置--->常规--->启用调试助手 要把在未经处理的异常上展开调用堆栈选中: 然后就有

  7. 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)

    https://blog.csdn.net/qq_31125793/article/details/51241943 背景 对现有的数据库连接池做调研对比,综合性能,可靠性,稳定性,扩展性等因素选出推 ...

  8. 19.java反射入门

    一.反射机制是什么反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  9. 2018-2019-2 20175329许钰玮 实验二《Java面向对象程序设计》实验报告

    实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 (一)单元测试 对于单元测试中单元的含 ...

  10. SkylineGlobe7.0.1版本 通过鼠标左右平移模型对象

    帮同事写了一段测试代码,如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...