【算法】第三章作业

1. 你对动态规划算法的理解(2分)

动态规划算法与分治法相似,将问题分成若干个子问题来求解,再从这些子问题的解得到原问题的解。但不同的是,它有两个明显的特点,一个是最优子结构,第二个是重叠子问题在动态规划算法问题上(分治法求解时,有些子问题被重复计算多次),一般采用这样的思路,分析最优子结构——找出递归关系——列出递归算法。

2. 分别列出编程题1、2的递归方程(2分)

1.

#include<iostream>

using namespace std;

int main()

{

    int n,i,j,max;

    int m[1000];

int a[1000];

cin>>n;

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

        cin>>a[i];

        m[1]=1;      

    for(i=2;i<=n;i++)

        {

            max=0;

            for(j=1;j<=i-1;j++)

            {

                if(m[j]>max&&a[i]>a[j])

                {

                    max=m[j];

                    m[i]=max+1;

                }

            }

        }

        cout<<m[n]<<endl;

     return 0;

}

 

2.

#include <iostream>

using namespace std;

int main()

{

int test[1000][1000];

    int n;

    scanf("%d",&n);

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

    {

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

        {

            scanf("%d",&test[i][j]);

        }

    }

     

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

    {

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

        {

            int j=i+k;

            for(int z=i+1;z<=j;z++)

            {

                int temp=test[i][z]+test[z][j];

                if(test[i][j]>temp)

test[i][j]=temp;

            }

        }

    }

    printf("%d\n",test[1][n]);

    return 0;

}

 

3. 说明结对编程情况(1分)

编程过程还好,就是双方比较难找时间凑在一起编程,之后要加强和搭档的联系吧。结对过程,都遇到不懂得问题时,会在网上求助,两人一起分析这个问题,这个过程还是挺充实、愉快的!

 

posted @ 2018-10-28 23:48  北南xxx极光  阅读(108)  评论(0)    收藏  举报