钢条切割问题的解法(C/C++)

(原题见算法导论·动态规划)

对长度为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)


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值