usaco
時間限制: 1 s
空間限制: 128000 kb
題目等級 : ** gold
題解考慮在下面被顯示的數字金字塔.
寫乙個程式來計算從最高點開始在底部任意處結束的路徑經過數字的和的最大.
每一步可以走到下方的點也可以到達右下方的點.
3 88 1 0
2 7 4 4
4 5 2 6 5
在上面的樣例中,從 7 到 3 到 8 到 7 到 5 的路徑產生了最大和:30
輸入描述 input description
第乙個行包含 r(1<= r<=1000) ,表示行的數目.
後面每行為這個數字金字塔特定行包含的整數.
所有的被**的整數是非負的且不大於 100
輸出描述 output description
單獨的一行包含那個可能得到的最大的和.
樣例輸入 sample input
3 88 1 0
2 7 4 4
4 5 2 6 5
樣例輸出 sample output
資料範圍及提示 data size & hint
分類標籤 tags 點此展開
usaco
【**】
1//(1)深搜
2 #include3 #include4 #include5
using
namespace
std;
6const
int mmax=1001;7
inta[mmax][mmax];
8intn;9
void dfs(int,int,int
);10
intans;
11int
main()
1221
void dfs(int x,int y,int
c)22
29 dfs(x+1,y,c+a[x+1][y]);//
深搜左邊
30 dfs(x+1,y+1,c+a[x+1][y+1]);//
深搜右邊 31}
32//
(2)記憶化搜尋(上一種方法超時的原因是因為對於同乙個點重複遞迴了)
33 #include34 #include35 #include36
using
namespace
std;
37int
n;38
const
int mmax=1001;39
int a[mmax][mmax],f[mmax][mmax];//
f[x][y]為(x,y)到金字塔底部的最大值
40int dfs(int,int
);41
intmain()
4252
int dfs(int x,int
y)53
60return f[x][y];//
返回 61}62
//(3)額。。。就是算出從頭到每個點的最大和,最後掃一遍最後一行找最大值就好
63 #include64 #include65
using
namespace
std;
66int
n;67
const
int maxx=1001;68
inta[maxx][maxx],f[maxx][maxx];
69int
main()
7082}83
int ans=0;84
for(int i=1;i<=n;i++)
85 ans=max(ans,f[n][i]);//
掃最後一行找最大值
86 cout<87return0;
88 }
1625 數字金字塔
usaco 時間限制 1 s 空間限制 128000 kb 考慮在下面被顯示的數字金字塔.寫乙個程式來計算從最高點開始在底部任意處結束的路徑經過數字的和的最大.每一步可以走到下方的點也可以到達右下方的點.3 88 1 0 2 7 4 4 4 5 2 6 5 在上面的樣例中,從 7 到 3 到 8 到...
字母金字塔(類同數字金字塔)
問題描述 讓程式要求使用者輸入乙個大寫字母,使用巢狀迴圈產生像下面這樣的金字塔圖案 aaba abcba abcdba abcdecba 演算法分析 每行包括三個部分內容 若干個空格 正序排列的字母 倒序排列的字幕。使用乙個外部迴圈來處理行,在每乙個行中使用三個內部迴圈 乙個處理空格,乙個以公升序列...
數字金字塔
觀察下面的數字金字塔。寫乙個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。7 3 8 8 1 0 2 7 4 4 4 5 2 6 5在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大 多組輸入資料 第乙個行包含 r...