(原题见算法导论·动态规划)
对长度为n的钢条进行切割,对应的切割长度和价格对应如下:
int cost[] = {0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30};
比如1对应价值1,10对应价值30。即相应的下标和值的对应。现求切割所得最大效益mx。
1.递归算法:
//g++ 编译通过
int cut_rod(int *cost,int n)
{
if(n == 0) return 0;
int limit = MIN(n,10); //分割第一条的上限
int mx = -1;
for(int i = 1;i <= limit; ++i)
mx = maxnum(mx,cost[i]+cut_rod(cost,n-i)); //取当前值于递归值的最大值
return mx;
}
由于对相同子问题的重复求解,T(n) = 2^n
2.递归标记数组算法:(自顶而下)(DFS)