背包问题_一些代码
2013-07-18 18:41
162 查看
学长给的代码:
可作参考void pack01(int a, int b) //0 - 1 背包
{
int i;
for(i = Sum; i >= a; i ++)
dp[i] = maxz(dp[i-a] + b, dp[i]);
}
void packcmp(int a, int b) //完全背包
{
int i ;
for(i = a; i <= Sum; i ++)
dp[i] = maxz(dp[i-a] + b, dp[i]);
}
void packmul() //多重背包
{
int i, k;
for(i = 1; i <= n; i ++)
{
if(num[i] * w[i] >= Sum)
{
packcmp(w[i], g[i]);
}
else
{
int k = 1;
int amount = num[i];
while( k < amount)
{
pack01(k * w[i], k * g[i]);
amount -= k;
k *= 2;
}
pack01(amount * w[i], amount * g[i]);
}
}
}
可作参考void pack01(int a, int b) //0 - 1 背包
{
int i;
for(i = Sum; i >= a; i ++)
dp[i] = maxz(dp[i-a] + b, dp[i]);
}
void packcmp(int a, int b) //完全背包
{
int i ;
for(i = a; i <= Sum; i ++)
dp[i] = maxz(dp[i-a] + b, dp[i]);
}
void packmul() //多重背包
{
int i, k;
for(i = 1; i <= n; i ++)
{
if(num[i] * w[i] >= Sum)
{
packcmp(w[i], g[i]);
}
else
{
int k = 1;
int amount = num[i];
while( k < amount)
{
pack01(k * w[i], k * g[i]);
amount -= k;
k *= 2;
}
pack01(amount * w[i], amount * g[i]);
}
}
}
相关文章推荐
- 背包问题_一些代码
- 0/1背包-背包问题程序代码(pascal)
- 【笔记+代码】背包问题
- .NET中一些常见代码的性能问题
- Javascript 拖拽雏形中的一些问题——逐行分析代码,让你轻松了解拖拽的原理
- 一些简单的利用循环实现问题的代码
- 最简单的0-1背包问题c++代码实例及运行结果
- 链栈代码实现及背包问题解决
- 一些常见的问题与解决代码!(五)(JS)
- 0/1 背包问题解释及代码
- 十大算法之一回溯法—解背包问题-C#代码
- 编程算法 - 背包问题(三种动态规划) 代码(C)
- 0-1背包问题与动态规划的C/C++代码
- 码代码时碰到的一些小问题 & Xcode的一些使用方法
- VC6.0 动态库或控件代码移植到VC2010一些异常问题
- 一些问题关于代码大全,移山之道,快速软件开发
- 0-1背包问题动态规划代码实现(C++实现)
- java与c/c++进行socket通信的一些问题(1)-JSP教程,Java技巧及代码
- 关于Html传递参数的问题的一些参考代码
- java中对文件的一些操作(删除,复制,计算大小..)和一些数学问题代码详解