zoukankan      html  css  js  c++  java
  • 【动态规划】数字三角形

    原题传送门

    思路


    这道题在CODEVS上标签是动态规划,然而本蒟蒻想了半天也没想出来(可能是我还是太弱了......),于是打算写个大爆搜看看能混几分,于是,20分钟的时间码完DFS,交上去,AC??!话说这道题数据这么不给力的吗???数据这么小那还用个什么DP啊???浪费发际线,然而,动态规划是绝对要比爆搜快的,如果数据够大,爆搜是无法AC的,而且毕竟做这道题的本意是练习动态规划,所以我又想了想动态规划的思路,最终动态规划的代码也做出来了,AC~~~

    DFS-Code


    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<vector>
    #include<algorithm>
    #include<cstdlib>
    #include<cmath>
    #include<stack>
    #include<map>
    using namespace std;
    
    int i,j,n,MAX=-99999999,a[101][101]; 
    
    void dfs(int x,int y,int v)
    {
    	int newvalue=v+a[x][y];
    	if(x==n)
    	{
    		if(newvalue>MAX)
    			MAX=newvalue;
    		return;
    	}
    	dfs(x+1,y,newvalue);
    	dfs(x+1,y+1,newvalue);
    }
    
    int main()
    {
        cin>>n;
        for(i=1;i<=n;i++)
        {
    		for(j=1;j<=i;j++)
    		{
    			cin>>a[i][j];
    		}
    	}
    	dfs(1,1,0);
        cout<<MAX;
        return 0;
    }
    

    DP-Code


    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<vector>
    #include<algorithm>
    #include<cstdlib>
    #include<cmath>
    #include<stack>
    #include<map>
    using namespace std;
    
    int i,j,n,MAX=-99999999,a[101][101],dp[101][101]; 
    
    
    
    int main()
    {
        cin>>n;
        for(i=1;i<=n;i++)
        {
    		for(j=1;j<=i;j++)
    		{
    			cin>>a[i][j];
    		}
    	}
    	for(i=n;i>=1;i--)
        {
    		for(j=1;j<=i;j++)
    		{
    			dp[i][j]=max(dp[i+1][j]+a[i][j],dp[i+1][j+1]+a[i][j]);
    		}
    	}
        cout<<dp[1][1];
        return 0;
    }
    
  • 相关阅读:
    javascript数据类型转换
    javascript运算符
    数据类型
    第一个JavaScript代码
    Javascript简介
    z-index
    Java代码优化
    Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
    java中继承条件下构造方法的执行过程
    java中的继承、重载和覆盖是什么意思
  • 原文地址:https://www.cnblogs.com/gongdakai/p/11402482.html
Copyright © 2011-2022 走看看