第三章作业报告

1、动态规划算法的理解:

将待求解的问题一步步分为若干个小问题,然后求解。每次求解都需要作出决策,选还是不选。而分解而成的子问题往往不是独立的,而是有一些重复的部分。为了减少时间复杂度,于是我们核心思想就是填表。于是动态规划的基本步骤可分为三步:找出最优解的性质并列出特征方程;根据方程写出迭代式子填表;输出我们需要的答案。

 

2、第一题主要代码:
    m[0] = 1;
    for (int i = 1; i < n; i++){
        m[i] = 1;
 for (int j = 0; j < i; j++){
   if (a[i] > a[j]){
   m[i] = (m[i] > m[j] + 1) ? m[i] : m[j] + 1;
}
}
}
    
    int max = m[0];
    for(int i = 1; i < n; i++) {
        if(max < m[i]) max = m[i];
    }
    cout << max;
}
第二题主要代码:
for(int i=2;i<=n;i++){
for(int j=i+1;j<=n;j++){
int k=j-i;
for(int p=k;p<j;p++){
if(a[k][j]>a[k][p]+a[p][j])
a[k][j]=a[k][p]+a[p][j];
}
}
}
cout<<a[1][n]<<endl;
 
3、动态规划个人感觉挺难的,比如解决问题的思路怎么想,比如边界条件临界条件之类的没有考虑到的地方,感觉还有很多东西需要向对方学习
posted @ 2019-11-03 19:47  deceiver丶  阅读(117)  评论(0编辑  收藏  举报