7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
给出一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。
注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的那个数或者右边的那个数
输入
第一行是一个整数N (1 < N <= 100),给出三角形的行数。
下面的N行给出数字三角形。数字三角形上的数的范围都在0和100之间。
输出
输出最大的和。
Sample input
- 5
- 7
- 3 8
- 8 1 0
- 2 7 4 4
- 4 5 2 6 5
sample input
- 30
dp入门第一题
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[101][101]; 4 int d[101][101]; 5 int n; 6 int F(int i,int j)//记忆化递归 7 { 8 if(d[i][j]>=0) return d[i][j]; 9 return d[i][j] = a[i][j] + (i == n ? 0 : max(F(i+1,j),F(i+1,j+1))); 10 } 11 int main() 12 { 13 memset(d,-1,sizeof(d)); 14 cin >>n; 15 for(int i=1;i<=n;i++) 16 for(int j=1;j<=i;j++) 17 cin >> a[i][j]; 18 cout << F(1,1) << endl; 19 return 0; 20 }
代码