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;
    }
    
  • 相关阅读:
    4-数组、指针与字符串1.3-this指针
    Linux命令----cp
    Linux命令----mv
    Linux命令----rm
    PHP7下的协程实现 转
    php生成器 yield 转
    python并发编程之多进程(实践篇) 转
    python 多进程
    线程创建 线程数
    多任务 执行
  • 原文地址:https://www.cnblogs.com/gongdakai/p/11402482.html
Copyright © 2011-2022 走看看