数字三角形
这题比较经典,我们需要从上到下或者从下到上dp求解
从上到下
#include<bits/stdc++.h>
using namespace std;
long long dp[200][200];
int main()
{
int r;
cin>>r;
for(int i=1;i<=r;i++)
{
for(int j=1;j<=i;j++)
{
cin>>dp[i][j];
}
}
for(int i=2;i<=r;i++)
{
for(int j=1;j<=i;j++)
{
dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j]);
}
}
long long maxx =0;
for(int i=0;i<=r;i++)
{
maxx= max(dp[r][i],maxx);
}
cout<<maxx;
return 0;
}
从下到上
#include<iostream>
#include<math.h>
#include<bits/stdc++.h>
using namespace std;
const int maxx=1e3+10;
int a[maxx][maxx];
int main()
{
int r;
cin>>r;
for(int i=1;i<=r;i++)
{
for(int j=1;j<=i;j++)
{
scanf("%d",&a[i][j]);
}
}
for(int i=r;i>=1;i--)
{
for(int j=1;j<=i;j++)
{
a[i][j]=max(a[i+1][j],a[i+1][j+1])+a[i][j];
}
}
cout<<a[1][1];
return 0;
}