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、说明结对编程情况。
挺不错的,两个人一起做的时候,集思广益,大家都有不同的想法,
并且如果犯一些低级错误的话,我们可以很快地指认出来修改。思
维不再局限于一个人的固有思维了。
原文:https://www.cnblogs.com/dingshupeng/p/9909336.html