最近在做算法题,遇到背包问题,网上的办法好是好但不够明了,既然是穷举不是贪心算法,那我就自己想了一个用二进制的算法,如下
思路
设置一个01数组,模拟二进制,比如4个商品,就从0000遍历到1111,不断+1,总共2的四次方种可能。是1就表示取到,0就是不取。穷举没什么好说的,看代码吧,我感觉还是比网上找的那些简洁一些?
测试用例
输入
10 4
7 42
3 12
4 40
5 25
出处:《算法设计与分析》(第3版)清华大学出版社 - Anany Levitin(美)
代码
#include <iostream>
using namespace std;
int main()
{
int max_price = 0; /*当前最大承重*/
int weight_line = 0; /*承重线,即背包最大承重*/
int goods_num = 0; /*货物数量*/
int goods_price[100] = {
0}; /*货物价格*/
int goods_weight[100] = {
0 }; /*货物重量*/
int goods[100<