zoukankan      html  css  js  c++  java
  • 动态规划算法2

        今天用了递归来解决昨天钢管的最有切割问题,代码如下

    #include <iostream>
    #include <algorithm>
    #include <time.h>
    using namespace std;

    int cut_rod(int *p, int n);
    int p[1000];
    int main()
    {
    clock_t start, finish;
    double duration = 0.0;
    memset(p, 0, sizeof(p));
    p[0]=0;
    p[1]=1;
    p[2]=5;
    p[3]=8;
    p[4]=9;
    p[5]=10;
    p[6]=17;
    p[7]=17;
    p[8]=20;
    p[9]=24;
    p[10]=30;
    int q = 0, n = 0; //q为最大价格,n为钢材长度,p数组为价格目录
    cout << "请输入钢材的长度:";
    cin >> n;
    start = clock();
    q = cut_rod(p, n);

    cout << "最大收益为 "<< q << endl;
    finish = clock();
    duration = (double)(finish - start)/CLOCKS_PER_SEC;
    cout << "it takes "<< duration << "seconds" <<endl;
    return 0;
    }

    int cut_rod(int *p, int n)
    {
    int q = -1e8;

    if (n == 0)
    {
    return 0;
    }
    else
    {
    for(int i = 1; i <= n; i++)
    {
    q = max(q, p[i] + cut_rod(p, n-i));
    }
    }

    return q;
    }

    如果各位有好的计算时间的函数,或给数组前几个元素赋值而使后面全为0的函数麻烦告知下,哪里有写的不好的地方请指正。

    这个算法的时间复杂度很高,远没有前面那个算法好,当n=30是计算时间达到了2分多钟,前面那个只要0.00000秒、、、、贴图如下,正在学习改进方法

  • 相关阅读:
    数据类型及用法
    NFS与SSH
    nginx服务,nginx反向代理
    rpm软件包管理
    磁盘分区,文件系统,软链接和硬链接,内存和进程管理
    Linux常用命令,文件目录和权限管理
    操作系统与网络协议(day3)
    计算机基础之硬件简介(Day2)
    QT写串口
    485传输
  • 原文地址:https://www.cnblogs.com/yican/p/3302635.html
Copyright © 2011-2022 走看看