算法第三章作业
1、每个问题都有其解决的原则或规律,找出来编写成公式,把问题套公式解决,这就是我理解的动态规划算法的理解。
2、
单调递增最长子序列:
int m[n] = {1};
int max=0;
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(a[i] > a[j] && m[i] < m[j]+1) {
m[i] = m[j] +1;
}
}
}
for(int i=0;i<n;i++){
if(max < m[i])
max = m[i];
}
组游艇问题:
for(int k=2;k<n;k++)
{
for(int i=1;i<=n-k;i++)
{
int z=i+k;
for(int j=i+1;j<z;j++)
{
int min=a[i][j]+a[j][z];
if(a[i][z]>min)
a[i][z]=min;
}
}
}
3、结对编程的情况
这次作业是和搭档一起完成的,感觉我的逻辑方面和解决问题的能力还不行,因为我们在讨论后还需要上网去查资料,并努力去理解每个代码的意思,最重要的是我想不出怎么优化这个算法,我知道这不是最好的,甚至有些地方可以省略合并,但是并没有找到。以后要加强能力,不能给搭档拖后腿。