YuRuiH_ @ 2017-07-18 10:47:21
**#include<bits/stdc++.h>
int n,a[1001][1001];
int ans=0;
using namespace std;
void dfs(int x,int y,int sum)
{
if(x==n)
{
ans=max(ans,sum);
return;
}
dfs(x+1,y,sum+a[x+1][y]);
dfs(x+1,y+1,sum+a[x+1][y+1]);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
scanf("%d",&a[i][j]);
dfs(1,1,a[1][1]);
printf("%d",ans);
}**
by 周忠皓 @ 2017-07-18 11:28:51
这样来:因为左下,右下你应该挑一个最优方案,而你都找了一遍,所以浪费了一半的时间。可以DP,从下往上逆推,状态转移方程为(dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1])//初始值为点上的数字)
by YuRuiH_ @ 2017-07-18 18:16:18
@周忠皓 谢谢dalao指点