1. 程式人生 > 其它 >【遞迴】數字三角形DFS記憶化搜尋遞迴

【遞迴】數字三角形DFS記憶化搜尋遞迴

技術標籤:題目筆記

2192: 【遞迴】數字三角形
時間限制: 1 Sec 記憶體限制: 64 MB
題目描述
對於大多數人來說,“我們是這麼的正常,因此也就這麼的平庸。”而天才總是與眾不同的,所以當邪狼問修羅王:“老大,你蹲在那兒一動不動看了有半個小時了,螞蟻有那麼好看嗎?”

修羅王是這樣回答的:“我在思索人生的意義,你看這螞蟻的面前有無數的道路選擇,但它不知道選擇哪條路可以到達目標,也不知道哪條路上有更多的食物,更不知道現在選擇的道路對它以後的影響……”

如圖所示,有一個層數為n(n≤1000)的數字三角形。現有一隻螞蟻從頂層開始向下走,每走下一級時,可向左下方向或右下方向走。求走到底層後它所經過數字的總和的最大值。

在這裡插入圖片描述

輸入
第一個整數為n,以下n行為各層的數字。
輸出
一個整數,即最大值,保證不超過整型的最大範圍。
樣例輸入 Copy
5
1
6 3
8 2 6
2 1 6 5
3 2 4 7 6
樣例輸出 Copy
23
提示
最大值=1+3+6+6+7=23

	#include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    priority_queue <int,vector<int>,less<int> > q;
    priority_queue <
int,vector<int>,greater<int> > pp; vector <int> aa; const int maxn=1e6+888; const int N=1006; int n,sum=0,minx=-1; int a[N][N]; int b[N][N]; int x=0,y=0; int dfs(int x,int y) { if(x==n-1||b[x][y]) return a[x][y]; b[x][y]=
1; return a[x][y]+=max(dfs(x+1,y),dfs(x+1,y+1)); } ll pre[maxn],sz[maxn],rk[maxn]; ll c[maxn]={0}; int m,v; int main(){ cin>>n; for(int i=0;i<n;i++) { for(int j=0;j<=i;j++) { cin>>a[i][j]; } } cout<<dfs(0,0); }