数字三角形:这应该是最简单的动态规划题了。
解题思路:题目要求所有路径中最大的,可以考虑从后面入手,第(i,j)的最大值,有两个来源,一个是从上直接下来,还有就是从斜边下来,即(i-1,j)和(i-1,j-1)中取最大值。然后定义一个变量用来记录最大值。最后输出这个最大值就行了!
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int main(){
int n;
int a[105][105];
memset(a,0,sizeof(a));
int dp[105][105];
memset(dp,0,sizeof(dp));
cin>>n;
int maxim =0;
for(int i=1; i <= n; i++){
for(int j =1; j <= i; j++ ){
cin >> a[i][j];
dp[i][j]=max(dp[i-1][j], dp[i-1][j-1]) + a[i][j];
if(dp[i][j] > maxim)
maxim = dp[i][j];
}
}
cout << maxim << endl;
return 0;
}