Pack
背包专题
背包吼哇!
基础的背包分为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的更多相关文章
- Html Agility Pack 解析Html
Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面 用Fir ...
- WPF中的Pack URI
更多资源:http://denghejun.github.io 问题 说来也简单:首先,我在WPF项目中建立了一个用户自定义控件(CustomControl),VS模板为我们自动生成了 CustomC ...
- SQL Server 2008 R2 升级到 Service Pack 3后Report Builder启动不了
一同事将测试服务器从SQL Server 2008 R2 SP2升级到了SQL Server 2008 R2 SP3后发现Report Service的报表编辑时启动不了Report Builder, ...
- SQL Server 2008 R2 Service Pack 3 已经发布
微软SQL Server Product Team在9月26号官方博客宣布,Microsoft SQL Server 2008 R2 Service Pack 3 (SP3)正式发布了 .具体信息可以 ...
- [PHP][位转换积累]之pack和unpack
一.前面的话 PHP的pack和unpack提供了为一系列数据打包(pack)和解包(unpack)成2进制流的功能,这个功能在面向字节的字符串处理和套接字的编程环境中尤为适用. 在了解这两个函数之前 ...
- 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 ...
- Windows Internal Database Service Pack 4 x64 Edition (KB2463332)安装失败
系统是Windows Server 2008 R2,补丁Windows Internal Database Service Pack 4 x64 Edition (KB2463332)总是安装失败,W ...
- [转]struct.pack 用法手记
原文:http://hi.baidu.com/tibelf/item/8b463d15edfdf10bd1d66d83 看到在进行c格式的二进制文件读取的过程中,用到了struct.unpack方法, ...
- PHP: 深入pack/unpack
https://my.oschina.net/goal/blog/195749 PHP作为一门为web而生的服务器端开发语言,被越来越多的公司所采用.其中不乏大公司,如腾迅.盛大.淘米.新浪等.在对性 ...
- #pragma pack(push,1)与#pragma pack(1)的区别
这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n) 作用:C编译器将按照n个字节对 ...
随机推荐
- Fragment与Activity的生命周期对比
因为fragment是依赖于activity的,所以activity的创建相关都是先于fragment的,fragment的销毁相关都是先于activity的.
- 18-10-31 Scrum Meeting 3
1.会议照片 2.每人的工作 昨天完成的工作 1 制定配置 修改配置 查询配置这三个接口 2 3 获取单词对应的中文释义 4 完成测验的部分接口 5 后端对接计划的接口 6 剩余的 ...
- 前后端分离djangorestframework——解决跨域请求
跨域 什么是跨域 比如一个链接:http://www.baidu.com(端口默认是80端口), 如果再来一个链接是这样:http://api.baidu.com,这个就算是跨域了(因为域名不同) 再 ...
- 解决Linux系统下Mysql数据库中文显示成问号的问题
当我们将开发好的javaWEB项目部署到linux系统上,操作数据库的时候,会出现中文乱码问题,比如做插入操作,发现添加到数据库的数据中文出现论码,下面就将解决linux下mysql中文乱码问题! 打 ...
- ASP.MVC学习资源总结
自己动手写一个简单的MVC框架(第一版) 自己动手写一个简单的MVC框架(第二版) ASP.Net请求处理机制初步探索之旅 - Part 1 前奏 ASP.Net请求处理机制初步探索之旅 - Part ...
- 微信小程序支付证书及SSL证书使用
小程序使用微信支付包括:电脑管理控制台导入证书->修改代码为搜索证书->授权IIS使用证书->设置TSL加密级别为1.2 描述: 1.通常调用微信生成订单接口的时候,使用的证书都是直 ...
- SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器
SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器 1. T-SQL编程 (1)声明变量 declare @age int (2)为变量赋值 (3)while循环 ...
- eos 创建两对的公钥和私钥, 钱包,交易所转账到主网,主网到交易所
在ubuntu18.04上安装EOS的目的: 在ubuntu中,进行eos源码编译和安装 在不联网的安全环境下,用eos官方的命令行工具,创建自己的公钥和私钥 用eos官方的命令行工具,创建钱包,执行 ...
- jQuery根据radio来控制texteara
最近遇到一个问题:需要通过点击radio来控制texteara的属性变化. 这里主要有两个知识点:1,给texteara设置属性:2,给texteara设置背景颜色. 在这里,假设texteara的i ...
- Python 函数初识 (1)
一.今日主要内容 认识函数 函数:对功能或者动作的封装(定义) 语法: def 函数名字(形参) 函数体 函数的调用格式:函数名(实参) 函数的返回值 关键字:return 终止函数的运行 1.函数内 ...