p1044數字三角形
09年 usaco 11月月賽 銅牌第一道
示出了乙個數字三角形。 請編乙個程式計算從頂至底的某處的一條路
徑,使該路徑所經過的數字的總和最大。
每一步可沿左斜線向下或右斜線向下走;
1《三角形行數<25;
三角形中的數字為整數<1000;
第一行為n,表示有n行
後面n行表示三角形每條路的路徑權
路徑所經過的數字的總和最大的答案
57 3 8
8 1 0
2 7 4 4
4 5 2 6 5
30搜尋80分,記憶化搜尋ac
記憶化搜尋,從後往前訪問。對於每乙個點正常往下走時有兩種不同走法,於是從上往下走時只需逆推即可。所以對於a[i][j]而言,只需加上a[i+1][j]與a[i+1][j+1]中的最大值。不斷迴圈最後得到最大值為a[1][1]。
1 #include2 #include3 #include4 #include5p1076數字三角形2using
namespace
std;
6int a[30][30
],n;
7int
main()817
}18 cout<1][1]<
19return0;
20 }
數字三角形
要求走到最後mod 100最大
第1行n,表示n行 <=25
第2到n+1行為每個的權值
mod 100最大值
21 99 98
99這題tyvj的資料非常詭異,想騙分的朋友輸出99會發現自己奇妙的得了90分。
由於資料比較弱所以搞個奇怪的dfs就ac了。
1 #include2 #include3 #include4 #include5view codeusing
namespace
std;
6int a[30][30],n,ans=0;7
void dfs(int x,int y,int
sum)
13else17}
18 dfs(x+1,y,(sum+a[x+1][y])%100
);19 dfs(x+1,y+1,(sum+a[x+1][y+1])%100
);20}21
intmain()
22
p1079數字三角形3
數字三角形必須經過某乙個點,使之走的路程和最大
第1行n,表示n行 <=25
第2到n+1行為每個的權值
程式必須經過n div 2,n div 2這個點
最大值
21 1 1
2各個測試點1s
剛看的時候想做成2段的bfs,後來看題解發現了另一種有趣的做法。
由於必須經過n div 2,n div 2這個點,則可以把這個點的權值加上乙個極大的數保證必過,最後輸出的時候減去加上的數的大小即可。
1 #include2 #include3 #include4 #include5加權值的做法√using
namespace
std;
6int a[30][30],n,ans=0
,qaq;
7int max(int x,inty)8
12int
main()
1325
}26 cout<1][1]-99999
<
27return0;
28 }
p1084數字三角形4
數字三角形必須經過某乙個點,使之走的路程和最大
第1行n,表示n行 <=25
第2到n+1行為每個的權值
第n+2行為兩個數x,y表示必須經過的點
最大值
21 1 1
1 1
2各個測試點1s
同前一道題的處理方式,不過必過的點變成了a[x][y]
1 #include2 #include3 #include4 #include5view codeusing
namespace
std;
6int a[30][30],n,ans=0
,x,y;
7int max(int x,inty)8
12int
main()
1325
}26 cout<1][1]-99999
<
27return0;
28 }
數字三角形
題目描述 示出了乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路 徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 25 三角形中的數字為整數 1000 輸入第一行為n,表示有n行 後面n行表示三角形每條路的路徑權 輸出路徑所經過的數字的總和最大的答案 樣...
數字三角形
description 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?input 輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n 1 n 100 表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,...
數字三角形
3 8 8 1 0 2 7 4 4 4 5 2 6 5 上圖給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,和最大的路徑稱為最佳路徑。你的任務就是求出最佳路徑上的數字之和。input 1 5 7 3 8 8 1 0 2 7 4 4 4 ...