博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【POJ】1276 Cash Machine 【背包问题】
阅读量:6824 次
发布时间:2019-06-26

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

1 思路

多重背包问题,可以将其化为01背包问题。

若用一般方法必TLE(把n个第i种物品看成毫无关联的n个物品,即∑ ni i = 1,2…N个物品(N为物品数目))
采用二进制思想,把n个第i种物品拆成1,2,4…2k,x个(其中x为不能再拆成2n 次方而余下的)
这样时间时间复杂度便由原来的θ(V×∑ ni)变为θ(V×∑ log ni)

2 源码

#include 
#include
// sort头文件#include
// memset头文件using namespace std;int main(int argc, char *argv[]){ int c, N, v[100]; int dp[100005]; int num, demo, i, j, k; while(cin>>c>>N){ k = 0; for(i=0; i
>num>>demo; j = 1; while(j
=2^k的最大整数。如果为13,就拆为1 2 4 6。 num -= j; v[k++] = j * demo; j *= 2; } if(num) // 此时不能正好完全拆成2^k形式 v[k++] = num*demo; } memset(dp, 0, sizeof(dp)); for(i=0; i
=0; j--) if(j>=v[i]) // 01背包一维数组解法 dp[j] = max(dp[j], dp[j-v[i]]+v[i]); cout<
<

Author: visaya fan 

Date: 2011-08-23 00:50:28

HTML generated by org-mode 6.33x in emacs 23

转载于:https://www.cnblogs.com/visayafan/archive/2011/09/27/2193628.html

你可能感兴趣的文章
泛型方法扩展
查看>>
android:stretchColumns=”0″
查看>>
javascrit2.0完全参考手册(第二版) 第2章第4节 基本的数据类型
查看>>
【转】HTML5的语音输入 渐进使用HTML5语言识别, so easy!
查看>>
数据仓库与数据挖掘的一些基本概念
查看>>
JAVA知多少
查看>>
使用ThinkPHP框架高速开发站点(多图)
查看>>
一步一步写算法(之 A*算法)
查看>>
ZeroMQ接口函数之 :zmq_tcp – 使用TCP协议的ØMQ网络单播协议
查看>>
Silverlight TabItem选中,未选中样式设置
查看>>
PAT 1002 Hello World for U (20)
查看>>
[华为机试练习题]55.最大公约数 &amp; 多个数的最大公约数
查看>>
文章标题
查看>>
对js原型对象的拓展和原型对象的重指向的区别的研究
查看>>
将数值四舍五入后格式化,带有千分位
查看>>
Atitit.反编译apk android源码以及防止反编译apk
查看>>
EF增删改查操作
查看>>
更改文件和目录的所有者
查看>>
[Angularjs]表单验证
查看>>
jquery------使用jQuery的委托方法
查看>>