• 算法第3章作业


    1. 对动态规划算法的理解:

    动态规划算法与分治法有点类似,主要思想是把待求解的问题分解成若干个子问题,通过先求解子问题再从子问题的解得出原问题的解。动态规划算法更加适合用来求最优解问题,有时候需要用一个表来记录已解决的子问题的答案,用来避免多次计算子问题的结果。

       2.编程题1的递归方程如下:

    for(int i=0;i<n;i++){

    cin>>a[i];

    b[i]=a[i];

    }

    int k,t;

    for(int i=0;i<n-1;++i){

    k=i;

    for(int j=i+1;j<=n-1;++j){

        if(a[j]<a[k])k=j;

    }

        if(k!=i){

       t=a[i];a[i]=a[k];a[k]=t;

            }  

    }

        for(int i=0;i<n;i++){

    c[i]=a[i];

    }

    int i,j;

    int x[n][n],y[n][n];

    for(i=1;i<=n;i++){

    x[i][0]=0;

    x[0][i]=0;

    }

    for(i=1;i<=n;i++){

    for(j=1;j<=n;j++){

    if(c[i]==b[j]){

    x[i][j]=x[i-1][j-1]+1;

    y[i][j]=1;

    }

    else if (x[i-1][j]>=x[i][j-1]){

    x[i][j]=x[i-1][j];

    y[i][j]=2;

    }

    else {

    x[i][j]=x[i][j-1];

    y[i][j]=3;

    }

    }

    }

    编程题2的递归方程如下:

    for(int i=0; i<n-1; i++){

            for(int j=i+1; j<n; j++){

                cin>>fee[i][j];

            }

        }

        for(int k=2; k<n; k++)

            for(int i=0; i<n-k; i++){

                int j = i+k;

            for(int a =i+1; a<j; a++){

                int b = fee[i][a] + fee[a][j];

                if(fee[i][j] > b)

                fee[i][j] = b;

            }

        }

        cout<<fee[0][n-1]<<endl;

        return 0;

    }

           3.结对编程的情况:

    结对编程时双方对问题有不同的看法,经过一番商量和分析后,都认识到了自己的思想的不足之处,并对算法做出了相应修改。

  • 相关阅读:
    springboot 配置
    spring boot配置分页插件
    mongodb 操作
    java基础知识
    java设计模式
    /cat/cpuinfo信息查看
    app接口开发
    基于OpenAM系列的SSO----基础
    关于Linux下的连接文件学习总结
    YII :将oracle中timestamp 字段正常显示在页面中
  • 原文地址:https://www.cnblogs.com/yelimin/p/9940812.html
Copyright © 2020-2023  润新知