2760:數字三角形
檢視提交統計提示提問
總時間限制: 1000ms 記憶體限制: 65536kb描述7
3 88 1 0
2 7 4 4
4 5 2 6 5
(圖1)
圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。
注意:路徑上的每一步只能從乙個數走到下一層上和它最近的左邊的那個數或者右邊的那個數。
輸入輸入的是一行是乙個整數n (1 < n <= 100),給出三角形的行數。下面的n行給出數字三角形。數字三角形上的數的範圍都在0和100之間。
輸出輸出最大的和。
樣例輸入57
3 88 1 0
2 7 4 4
4 5 2 6 5
樣例輸出
30**
翻譯自 ioi 1994 的試題
/*
2760:數字三角形
思路,1.採用直接遞迴,會超時
*/#include#include#define max 101
using namespace std;
int d[max][max];
int n;
int maxsum(int i,int j)
int main()
} cout << maxsum(1,1) << endl;
}
/*
2760:數字三角形
思路,1.採用直接遞迴,會超時
2.採用記憶型遞迴,對每乙個數計算出的數進行記錄,從而減少計算次數
*/#include#include#define max 101
using namespace std;
int d[max][max];
int n;
int maxsum[max][max];
int maxsum(int i,int j)
int main()
} cout << maxsum(1,1) << endl;
}
/*
2760:數字三角形
思路,1.採用直接遞迴,會超時
2.採用記憶型遞迴,對每乙個數計算出的數進行記錄,從而減少計算次數
3.遞迴轉換為遞推,用迴圈實現
*/#include#include#define max 101
using namespace std;
int d[max][max];
int n;
int maxsum[max][max];
int main() }
for(i = 1;i <= n;i++) maxsum[n][i] = d[n][i];
for(i = n - 1;i >= 1;--i)
for(j = 1;j <= i;++j)
maxsum[i][j] = max(maxsum[i+1][j],maxsum[i+1][j+1]) + d[i][j];
cout << maxsum[1][1] << endl;
return 0;
}
/*
2760:數字三角形
思路,1.採用直接遞迴,會超時
2.採用記憶型遞迴,對每乙個數計算出的數進行記錄,從而減少計算次數
3.遞迴轉換為遞推,用迴圈實現
4.由於其中下部分的陣列在使用後就不再使用,對輸出無影響,故而可以
用來代替maxsum資料從而節約儲存空間
*/#include#include#define max 101
using namespace std;
int d[max][max];
int n;
int *maxsum;
int main() }
maxsum = d[n];
for(i = n - 1;i >= 1;--i)
for(j = 1;j <= i;++j)
maxsum[j] = max(maxsum[j],maxsum[j+1]) + d[i][j];
cout << maxsum[1] << endl;
return 0;
}
百練2760 數字三角形 DP
描述 圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。輸入的是一行是乙個整數n 1 n 100 給出三角形的行數。下面的n行給出數字三角形。數字三角形上的數的範圍都在0和100之間。輸出 輸出最大的和。樣例...
數字三角形
題目描述 示出了乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路 徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 25 三角形中的數字為整數 1000 輸入第一行為n,表示有n行 後面n行表示三角形每條路的路徑權 輸出路徑所經過的數字的總和最大的答案 樣...
數字三角形
description 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?input 輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n 1 n 100 表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,...