博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
背包模版
阅读量:6942 次
发布时间:2019-06-27

本文共 975 字,大约阅读时间需要 3 分钟。

关于背包DP的文章很多,谷歌百度搜《背包九讲》即可。本文章只放模版。

文章统一v代表体积,w代表价值,f代表dp数组,V代表总体积,W代表总价值,均采用滚动数组。答案一般都为f[V]。

  • 01背包:
    void zop(int v, int w) {	for(int i = V; i >= v; --i)		f[i] = max(f[i], f[i-v]+w);}
  • 完全背包:
    void cmp(int v, int w) {	for(int i = v; i >= V; ++i) 		f[i] = max(f[i], f[i-v]+w);}
  • 多重背包:
    void dcp(int v, int w, int m) {	if(m * v >= V) { cmp(v, w); return; }	int k = 1;	while(k < m) { //二进制思想,即倍增		zop(k*v, k*w);		m -= k;		k <<= 1;	}	zop(m*v, m*w);}
  • 多维背包(原理都一样的):
    //多维的话,增加滚动数组维数,例如有两个约束G和V,那么可以这样(这是多维的01)int i, j, k;for(i = 1; i <= N; ++i) {	cin >> v >> g >> w;	for(j = V; j >= v; --v)		for(k = G; k >= g; --k)			f[j][k] = max(f[j][k], f[j-v][k-g]+w);}
  • 混合背包:
    void zop(int v, int w) {	for(int i = V; i >= v; --i)		f[i] = max(f[i], f[i-v]+w);}void cmp(int v, int w) {	for(int i = v; i >= V; ++i) 		f[i] = max(f[i], f[i-v]+w);}void dcp(int v, int w, int m) {	if(m * v >= V) { cmp(v, w); return; }	int k = 1;	while(k < m) { //二进制思想,即倍增		zop(k*v, k*w);		m -= k;		k <<= 1;	}	zop(m*v, m*w);}

转载地址:http://zjgjl.baihongyu.com/

你可能感兴趣的文章
签约百度推进互联网+交通 西安打造智慧城市
查看>>
大数据全面应用打击线下线上假冒伪劣
查看>>
伊顿助力阿里打造世界级顶尖数据中心
查看>>
可穿戴式设备的安全水平究竟如何?
查看>>
无限城市助力智慧城市 挥毫创新3.0时代
查看>>
德司法部长:Facebook应被视为媒体公司 需打击仇视言论
查看>>
[知识图谱] 1.1-知识图谱是什么?
查看>>
Git 入门级命令锦集
查看>>
parcel初体验
查看>>
JavaScript中的错误类型
查看>>
创建型设计模式——抽象工厂模式
查看>>
用react+redux实现微信PC客户端UI交互界面
查看>>
Dijkstra算法及正确性分析
查看>>
Python自动化邮件添加HTML表格图像和Excel附件
查看>>
Flutter BottomAppBar插入FAB
查看>>
vue 动态加载组件
查看>>
linux端静默安装Oracle数据库(二)文件配置
查看>>
使用nodejs创建Marketing Cloud的contact数据
查看>>
强行来一波Dagger2使用介绍
查看>>
统计网站PV和UV
查看>>