The Triangle
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 50890 Accepted: 30823 Description
Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right. 7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
(Figure 1)Input
Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle, all integers, are between 0 and 99.Output
Your program is to write to standard output. The highest sum is written as an integer.Sample Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5Sample Output
30
数字三角形。
f[i][j] = max(f[i - 1][j], f[i - 1][j - 1]) + a[i][j]
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <cstdio> 2 #include <algorithm> 3 4 using namespace std; 5 6 int n, f[200][200], ans; 7 8 int main() { 9 scanf("%d", &n); 10 for(int i = 1 ; i <= n ; i ++) { 11 for(int j = 1 ; j <= i ; j ++) { 12 scanf("%d", &f[i][j]); 13 f[i][j] += max(f[i - 1][j], f[i - 1][j - 1]); 14 if(i == n) { 15 ans = max(ans, f[i][j]); 16 } 17 } 18 } 19 printf("%d\n", ans); 20 }
如果要强制经过某一点(x, y)?
a[x][y] += INF
答案再减去INF就行
如果禁止进过某一点?
减去INF就行