重复

导航

算法第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.结对编程的情况:

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

posted on 2018-11-10 22:06  重复  阅读(105)  评论(0编辑  收藏  举报