奶牛保龄球:金字塔形的保龄球中从顶往下撞击,每次只能撞击左下或右下两个,求所有撞到得分的最高值。
dp:dp[i][j]=max(d[i+1][j],dp[i+1][j+1])+m[i][j];
#include<cstdio>
#include<iostream>
using namespace std;
int ma(int x,int y)
{
if(x>y)
return x;
else
return y;
}
int main()
{
int dp[355][355],m[355][355];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<=i;j++)
{
scanf("%d",&m[i][j]);
}
for(int i=n-1,j=0;j<=i;j++)
{
dp[i][j]=m[i][j];
//cout<<dp[i][j]<<endl;
}
for(int i=n-1;i>=0;i--)
for(int j=0;j<=i;j++)
dp[i][j]=ma(dp[i+1][j],dp[i+1][j+1])+m[i][j];
printf("%d",dp[0][0]);
return 0;
}