在,科尔曼等人。关于解决切棒问题的讨论如下(第369页)
EXTENDED-BOTTOM-UP-CUT-ROD(p, n)
let r[0...n] and s[0....n] be new arrays
r[0] = 0
for j = 1 to n:
q = -infinity
for i = 1 to j:
if q < p[i] + r[j - i]: // (6)
q = p[i] + r[j - i]
s[j] = i
我对如何修改自下而上的切割杆算法以包含每次切割的固定成本c感到有点困惑。使收益等于零件价格减去成本的和。我有类似的东西,但我不确定我是否在正确的轨道上。
MODIFY-BOTTOM-UP-CUT-ROD(p,n)
1. let r[0..n] be a new array
2. r[0] = 0
3. for j = 1 to n
4. q = -INF
5. for i = 1 to j
6. q = max(q,p[i] + r[j-i] - c)
7. r[j] = q
8. return r[n]
关于“棒材切割”问题:
给定一根长度为n英寸的棒子,以及包含小于n的所有尺寸的价格的一系列价格。通过切割杆并出售该杆来确定可获得的最大值。[]
算法简介(CLRS)第366页给出了自下而上(动态规划)方法的伪代码:
1. BOTTOM-UP-CUT-ROD(p, n)
2. let r[0 to n]be a new array .
3. r[0] = 0
4. for j = 1 to n
5. q = -infinity
我试着用函数式编程语言中首选的记忆法来实现切杆问题,同时试图尊重不变性,但我不知道如何才能做到这一点。切割杆问题的算法是...
memoized-cut-rod(p, n)
let r[0..n] be a new array
for i = 0 to n
r[i] = -infinity
return memoized-cut-rod-aux(p, n, r)
memoized-cut-rod-aux(p, n, r)
if r[n] >= 0
return r[n]
if n == 0
q = 0
else
q = -infinity
for
我正在尝试实现在CLRS中演示的棒状切割算法,但我发现自己很难找到正确的指标。以下是我对回忆录版本的实现:
import sys
def rod_cutting_memoization(p,n):
r = [None for i in range(n+1)]
r[0] = 0
rod_cutting_memoization_aux(p,n,r)
return r
def rod_cutting_memoization_aux(p,n,r):
print r
if r[n] is not None:
return r[n]
我试图解决以下问题:
一张M*N的长方形纸被切成正方形,以便:
这张纸是沿着平行于纸的一边的一条线切割的。
该文件被切割,使得所得维数总是整数。
当纸张不能再切下去时,这个过程就停止了。
切成正方形的纸片的最小数量是多少?
限值:1 <= N <= 100和1 <= M <= 100。
例如:让N=1和M=2,那么答案是2,因为最小的平方数可以被切割为2(纸张沿中间较小的边水平切割)。
我的代码:
cin >> n >> m;
int N = min(n,m);
int M = max(n,m);
int ans = 0
我有一个家庭作业的问题,我已经努力解决了一段时间,但我无法解决我的生活。
我有一张尺寸为X*Y的图纸,还有一组尺寸较小的图案,以及与它们相关的价格。我可以水平或垂直切割板材,我必须找到优化的切割模式,以获得最大的利润从板材。
据我所知,应该有(X*Y)(X+Y+#ofPatterns)个递归操作。复杂度应该是指数级的。有人能解释一下为什么吗?
我想出的伪代码如下:
Optimize( w, h ) {
best_price = 0
for(Pattern p : all patterns) {
if ( p fits into this piece of cloth
我现在正在上一门算法课。我正在用python测试其中的很多东西,包括动态编程。下面是一个实现自下而上切割棒的实现。
因为off-by-one错误,所以它不能工作。在python中是否有一个全局设置,可以将默认数组索引更改为1而不是0?或者有人能为我提供一个更好的策略来克服我遇到的一百万次的错误。这太烦人了。
def bottom_up_memo_cut_rod(p,n):
r = [ 0 for i in range(n) ]
r[0] = 0
for j in range(n):
q = -1
for i in range(j):
学校的一项作业要求我为这项任务编写一个程序:
在棒材切割问题上,我们得到了一根长度为n英寸的杆和一张i = 1, 2, …, n__的价格表。这里p[i]是一根长度为i__inches的棒的价格。我们必须找到最优的切割方式,这样才能通过出售产品来获得最大的收入。
下面是我对此任务的解决方案(在Python中):
def cut_rod(p, n):
"""
Take a list p of prices and the rod length n and return lists r and s.
r[i] is the maximum reven
我用python编写了这段代码,目前它只返回切割一根杆子的最大值。我怎样才能修改它,让它也能告诉我切割发生在哪里呢?它采用一个价格列表,其indices+1对应于每个长度的杆值,n对应于杆的长度。
问题:
def cutRod(price, n):
val = [0 for x in range(n+1)]
val[0] = 0
for i in range(1, n+1):
max_val = 0
for j in range(i):
max_val = max(max_val, price[j] + val[
因此,我正在尝试为的修改版本编写代码。这个链接给出了问题的一个很好的直觉。但是,我希望修改代码,使其不仅实际返回解决方案,即哪些裁剪提供最优解,而且还将裁剪的数量限制在最大k。
为了证明概念,我正在尝试创建一个算法来实现这一点。下面是我到目前为止所做的,我认为它成功地返回了实际的解,但是,我不知道如何将最大值限制为k。
let r[0..n] be a new array
r[0] = 0
for j = 1 to n
q = -1
for i = 1 to j
for k = 0 to n-1
q = Math.max(q[n][k]