[ダイナミックプログラミング]三角数

オリジナルタイトルポータル

考え


この質問は、ラベルに記載されてCODEVS動的計画であるが、これTaccaは長い時間が(おそらく私が......あまりにも弱かった)考え抜かために、彼は検索で暴露の外観を書くことを意図したかっするビットと混合することができます、その後、タイムコードの完全なDFSの20分は、ACを払いますか?この質問のデータワードは、それを強制することはありませんか?何DPああでそのデータも小さいので???廃棄物ヘアラインしかし、動的なプログラミングは、データが十分に大きい場合、バーストの検索はACではなく、すべての後に、動的プログラミングの問題を解決するための意図が練習しているので、私は、動的プログラミングのアイデアを考え、バースト検索より確実に高速です、最終的な動的プログラミングコードはまた、ACを作られて~~~

DFS-コード


#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-コード


#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;
}

おすすめ

転載: www.cnblogs.com/gongdakai/p/11402482.html