博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj-1163 动态规划
阅读量:5073 次
发布时间:2019-06-12

本文共 831 字,大约阅读时间需要 2 分钟。

这道题目并不能直接使用递归,因为

                                 7(1)

                       7(1)         7(1)   

                7(1)      7(2)         7(1)

        7(1)       7(3)         7(3)          7(1)

7(1)      7(4)         7(6)        7(4)         7(1)

假设题目中的数据是这样子的,小括号内代表着每个数被递归调用的次数。

这个三角实际上是一个杨辉三角,它的和为  2^n -2  ,题目中的层数大小是100以内,那最大的话就要算到  2^100 ,

这已经不是超时的问题了,汗颜。

那怎么办呢?我们只需要将每次用到的值它的最大值存起来,等着返回的时候,让上层的递归直接使用就可以了。

这样的话复杂度就是等差数列,就是n(n-1)/2,所以这次就不用等到宇宙毁灭了。

#include 
#include
#define MAX 101using namespace std;int n,D[MAX][MAX];int maxsum[MAX][MAX];int MaxSum(int i,int j){ if (maxsum[i][j]!=-1) { return maxsum[i][j]; } if (i==n) { maxsum[i][j]=D[i][j]; } else { int x=MaxSum(i+1,j); int y=MaxSum(i+1,j+1); maxsum[i][j]=max(x,y)+D[i][j]; } return maxsum[i][j];}int main(){ int i,j; cin>>n; for (int i=1;i<=n;i++) { for (int j=1;j<=i;j++) { cin>>D[i][j]; maxsum[i][j]=-1; } } cout<
<

 

转载于:https://www.cnblogs.com/xyqxyq/p/10211361.html

你可能感兴趣的文章