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;
    }
    
  • 相关阅读:
    SQL Sever语言 存储过程及触发器
    计蒜客 挑战难题 移除数组中的重复元素
    projecteuler Sum square difference
    码农谷 求前N项之和
    projecteuler Smallest multiple
    计蒜客 挑战难题 寻找插入位置
    Largest palindrome product
    计蒜客 挑战难题 元素移除
    码农谷 球从M米高度自由下落第N次落地时反弹的高度
    挑战难题 奇怪的国家
  • 原文地址:https://www.cnblogs.com/gongdakai/p/11402482.html
Copyright © 2011-2022 走看看