完全背包问题(二进制解法)
来源:互联网 发布:对等网络属于局域网吗 编辑:程序博客网 时间:2024/05/29 19:55
题目
有N件物品和一个容量为V的背包。第i件物品的重量是w[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量的最大重量。
基本思路
首先,我想分析一下这个题目大暴力时,复杂度为什么为N^2。如果大暴力,本题目的预算次数实际为pow(2,n)-1。
初等数学思路(大佬请忽略):
本题中一共给定n个物品,如果要放入1个物品时为N种;
如果要放入2个时候,需要从N个中取出A2N个物品;
所以该题目为N个物品从1到N的全排列的前N项和;
(PS:如果任意一个物品体积都大于背包体积时,所以存在所有物品都不选择的坑)
所以由初等数学知识可知,该题目的实际运算次数为pow(2,n)-1;
二进制思路:先上思路图
首先需要先解释一下图片,图片照片中的红色表示选择a[i-1]位置的物品,绿色则表示不选择。
再进行思路解释,物品中共有pow(2,n)-1个线段。每个线段回溯到顶端,就为一种方法解决方法,如果把要与不要,分别抽象为1和0,则实现了控制是否收取本位物品的方法,在进行判断每次加法之后是否存在一个大数,记录大数就可以,当不满足是跳过就可以。
(PS:当出现问题拓展的时候,可以记录满足条件时候的十位数就可以了)。
//// main.cpp// 01背包问题(二进制)// Created by MaLker on 2017/3/2.// Copyright © 2017年 MaLker. All rights reserved.//#include <iostream>#include <math.h>#include <algorithm>using namespace std;int main(int argc, const char * argv[]) { int n,a[10],biger; while (scanf("%d%d",&n,&biger)!=EOF) { for (int i=0; i<n; i++) {//我是输入的数据 scanf("%d",&a[i]); } int t = pow(2, n)-1/*计算的次数,并且存储*/,midi,sum = 0,max1 = 0; for (int i = 1 ; i < t; i++) { midi = i/*i的中间值,防止i被污染*/; for (int tm = 0; tm < n; tm++) { if ((midi>>1)&1) {/*按位运算取对应物品位置的取舍*/ sum+=a[tm]; } if(sum <= biger) max1 = max(max1,sum);/*筛选判断*/ else continue;/*最水的优化*/ } sum=0;/*初始化相应位置的求和*/ } printf("%d\n",max1); } return 0;}//if((i>>1)&1)
2 0
- 完全背包问题(二进制解法)
- 完全背包问题(基本思路解法)
- hdu2844 多重背包+二进制优化(多重背包的完全背包优化解法)
- 背包问题(栈解法)
- nyoj311完全背包(完全背包问题)
- poj 1276 (完全背包二进制转化01背包)
- 关于完全背包问题用二进制优化的可行性证明
- 背包问题(01背包,完全背包,多重背包)
- 背包问题(01背包,完全背包,多重背包)
- 背包(01背包、完全背包、多重背包)问题总结
- 背包问题(01背包,完全背包,多重背包)
- 背包问题(01背包 + 完全背包 + 多重背包)
- 背包问题(01背包,完全背包,多重背包)
- 背包问题模板(01背包,完全背包,多重背包)
- 经典背包问题----(01背包、完全背包、多重背包)
- 背包问题(1)完全背包
- 背包问题2(完全背包)
- 背包问题(一):完全背包
- Apache启用mod_expires模块
- 【ORACLE】ora-12518【AIX】监听程序无法分发客户机连接
- 无法启动此程序因为计算机中丢失opencv_world300
- 常用的STL查找算法
- 分集 复用 多址
- 完全背包问题(二进制解法)
- Ubuntu 14.04 环境下在ROS安装测试Cartographer
- c++内存详解
- tomcat eclipse 内存
- apktool反编译:Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file
- LeetCode-530. Minimum Absolute Difference in BST
- 用iconfont修改checkbox样式
- Python爬虫之requests
- 什么是隧道技术