zoukankan      html  css  js  c++  java
  • 钢条切割

    #include<iostream>
    #include<algorithm>
    using namespace std;
    //rn=max(pi+rn-1)
    
    int Cut_Rod(int *p, int n)
    {
        if (n == 0)
            return 0;
        int q = -1;
        for (int i = 1; i <= n; i++)
        {
            q = max(q, p[i] + Cut_Rod(p, n - i));
        }
        return q;
    }
    int Memoized_Cut_Rod_Aux(int *p, int n, int *r)
    {
        if (r[n] >= 0)
            return r[n];
        int q;
        if (n == 0)
            q=0;
        else
        {
            q = -1;
            for (int i = 1; i <= n; i++)
            {
                q = max(q, p[i] + Memoized_Cut_Rod_Aux(p,n-i,r));
            }
        }
        r[n] = q;
        return q;
    }
    int Momized_Cut_Rod(int *p, int n)
    {
        int *r = new int[n + 1];
        for (int i = 0; i < n + 1; i++)
            r[i] = -1;
        int res = Memoized_Cut_Rod_Aux(p,n,r);
        delete[]r;
        return res;
    }
    int Bottom_Up_Cut_Rod(int *p, int n)
    {
        int *r = new int[n + 1];
        r[0] = 0;
        int q;
        for (int j = 1; j <= n; j++)
        {
            q = -1;
            for (int i = 1; i <= j; i++)
            { 
                q = max(q, p[i] + r[j - i]);
            }
            r[j] = q;
        }
        return q;
    
    }
    int Extended_Bottom_Cut_Rod(int *p, int n,int *s)
    {
        int *r = new int[n + 1];
        r[0] = 0;
        int q;
        for (int j = 1; j <= n; j++)
        {
            q = -1;
            for (int i = 1; i <= j; i++)
            {
                if (q < p[i] + r[j - i])
                {
                    q = p[i] + r[j - i];
                    s[j] = i;
                }
            }
            r[j] = q;
        }
        int res = r[n];
        delete[]r;
        return res;
    }
    int Print_Cut_Rod_Solution(int *p, int n)
    {
        int *s=new int[n+1];
        int r = Extended_Bottom_Cut_Rod(p,n,s);
        while (n>0)
        {
            cout << s[n] << "  ";
            n = n - s[n];
        }
        cout << "
    ";
        delete[]s;
        return r;
    
    }
    int main()
    {
        int p[] = {0,1,5,8,9,10,17,17,20,24,30};
        cout << Print_Cut_Rod_Solution(p, 4) << endl;
    
        return 0;
    }
  • 相关阅读:
    CDH简易离线部署文档
    算法图解读书笔记
    html 知识整理
    Django admin 组件 原理分析与扩展使用 之 sites.py (一)
    阿里云 centos7 django + uWSGI+Nginx + python3 部署攻略
    git 命令和使用场景总结
    由select引发的思考
    Python 实现单例模式的一些思考
    pep 8 规范的一些记录
    python 垃圾回收机制的思考
  • 原文地址:https://www.cnblogs.com/liuhg/p/Cut_Rod.html
Copyright © 2011-2022 走看看