zoukankan      html  css  js  c++  java
  • poj-1163 动态规划

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

                                     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 <iostream>
    #include <algorithm>
    #define MAX 101
    using 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<<MaxSum(1,1)<<endl;
    	return 0;
    }
  • 相关阅读:
    linux ssh免密
    flink WaterMark之TumblingEventWindow
    flink 并行计数器实现
    VSCode删除重复的空行
    Gnome添加Open with Code菜单
    Linux下设置VSCode为默认的文本编辑器
    Jupyter Notebook添加Ruby支持
    Linux下无法运行Color picker
    oh-my-zsh: bracketed-paste-magic:zle:47: not enough arguments for -U
    Vim auto-pairs设置选项
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10211361.html
Copyright © 2011-2022 走看看