1、对动态规划的理解。

我认为动态规划和分治法很像,动态规划是把问题分解成一个个小问题,然后

每个小问题之间都有可以递推的关系,只要先给最底端的小问题赋了值或者怎

样得到了值,就可以通过这种递推关系,从最小规模得问题开始往上推,直到

推出问题规模为n(要求的)的值。

2、编程题1,2的递归方程。

编程题1(单调递增最长子序列):

for(int i=1;i<n;i++)
 {
  for(int j=0;j<i;j++)
  {
   if(a[j]<a[i])
         m[i]=max(m[i],m[j]+1);
  }
    }

 m[ i ] 和在 i 之前的所有 m[ j ] 中最大的 m [ j ] + 1作比较,取较大值即可。( m [ n ] 赋初值为1)

编程题2(租用游艇问题):

for(int l=2;l<=n;l++)
    {//从短长度开始找较优解
        for(int i=0;i<n;i++)
        {
            int j=i+l-1;//(i,j)的长度为l
            for(int k=i;k<=j;k++)
            {//在i到j中找中间点k,使得(i,k)+(k,j)更小
                int t=c[i][k]+c[k][j];
                if (t<c[i][j])
                {
                    c[i][j]=t;//用较优解替换原来的r(i,j)
                }
            }
        }
    }

因为是找最省钱的,而且不知道从0到n要换几次游艇,所以不能直

接用动态规划c[i][j]=c[i][k]+c[k][j],而是从长度出发,把每两站之间

的价格算出来,再求最省钱的方法。

3、说明结对编程情况。

挺不错的,两个人一起做的时候,集思广益,大家都有不同的想法,

并且如果犯一些低级错误的话,我们可以很快地指认出来修改。思

维不再局限于一个人的固有思维了。