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个字节对 ...
随机推荐
- django入门与实践 - 关于升级到django 3.7,三种模板超链接配置(编辑中)
第一种方法: 在myblog/urls.py模块中: from django.contrib import admin from django.urls import path, include ur ...
- CTS问题分析6
遇到一个Android P相关的问题,和原来CTS/GTS 问题分析1的表现是一样的,但是将 这个修复cp过来,发现不生效,仍然报错,因此记录一下 问题初探 测试命令: run gts -m GtsG ...
- AngularJS学习之旅—AngularJS Select(十)
1.AngularJS Select(选择框) AngularJS 可以使用数组或对象创建一个下拉列表选项. ng-option:创建一个下拉列表,列表项通过对象和数组循环输出 eg: <div ...
- AngularJS学习之旅—AngularJS 过滤器(七)
1.AngularJS 过滤器 过滤器可以使用一个管道字符(|)添加到表达式和指令中. AngularJS 过滤器可用于转换数据: 过滤器 描述 currency 格式化数字为货币格式. filter ...
- Linux中Tomcat设置开机启动
设置方法 1.修改/etc/rc.d/rc.local,使用vi /etc/rc.d/rc.local 命令 2.在/etc/rc.d/rc.local文件最后添加下面两行脚本 export JAVA ...
- kubernetes 集群安装etcd集群,带证书
install etcd 准备证书 https://www.kubernetes.org.cn/3096.html 在master1需要安装CFSSL工具,这将会用来建立 TLS certificat ...
- 网络流问题 P2763 试题库问题
题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法. ...
- UIImagePickerDelegate - 官方文档说明
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDic ...
- GEC6818连接Ubuntu,下载程序至开发板
使用 secure CRT连接开发板,可视化操作 连接成功 设置临时ip ubuntu 要跟 开发板同一网段: ip前三位相同 代码:sudo service tftpd-hpa restart 代 ...
- Epemme
Goss wa lap tirre kamme da, Waess u'malarre zuzze nasa. Mat abbe price junirre nay, Ywe zay prolodde ...