【算法】第三章作业
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分)
编程过程还好,就是双方比较难找时间凑在一起编程,之后要加强和搭档的联系吧。结对过程,都遇到不懂得问题时,会在网上求助,两人一起分析这个问题,这个过程还是挺充实、愉快的!
浙公网安备 33010602011771号