Number Triangle
1435 ワード
Number Triangle
Time Limit:1s
Memory limit:32M
Accepted Submit:1010
Total Submit:2725
Consider the number triangle shown below. Write a program that calculates the highest sum of numbers that can be 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.
In the sample above, the route from 7 to 3 to 8 to 7 to 5 produces the highest sum: 30. Input There are multiple test cases.The first line of each test case contains R (1 <= R <= 1000), the number of rows. Each subsequent line contains the integers for that particular row of the triangle. All the supplied integers are non-negative and no larger than 100. Output Print a single line containing the largest sum using the traversal specified for each test case. Sample Input
DPで解き、最後の行から上へ押し上げ、最大を見つけて、頂点までが最大値です
#include long int a[1000][1001]; void main() { int n; int i,j; while(scanf("%d",&n)!=EOF) { for(i=0;i=0;i--) for(j=0;j<=i;j++) a[i][j]+=a[i+1][j]>a[i+1][j+1]?a[i+1][j]:a[i+1][j+1]; printf("%d/n",a[0][0]); } }
Time Limit:1s
Memory limit:32M
Accepted Submit:1010
Total Submit:2725
Consider the number triangle shown below. Write a program that calculates the highest sum of numbers that can be 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
In the sample above, the route from 7 to 3 to 8 to 7 to 5 produces the highest sum: 30. Input There are multiple test cases.The first line of each test case contains R (1 <= R <= 1000), the number of rows. Each subsequent line contains the integers for that particular row of the triangle. All the supplied integers are non-negative and no larger than 100. Output Print a single line containing the largest sum using the traversal specified for each test case. Sample Input
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output 30
http://acm.fzu.edu.cn/problem.php?pid=1004
DPで解き、最後の行から上へ押し上げ、最大を見つけて、頂点までが最大値です
#include long int a[1000][1001]; void main() { int n; int i,j; while(scanf("%d",&n)!=EOF) { for(i=0;i=0;i--) for(j=0;j<=i;j++) a[i][j]+=a[i+1][j]>a[i+1][j+1]?a[i+1][j]:a[i+1][j+1]; printf("%d/n",a[0][0]); } }