Sky_valley @ 2018-05-15 21:25:23
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define _ 1005
int mp[_][_],dp[_][_];
int n;
int dfs(int x,int y)
{
if(x==n){ dp[x][y]=mp[x][y]; return mp[x][y];}
int p,q;
if(dp[x+1][y]>=0) p=dp[x+1][y];
else p=dfs(x+1,y);
if(dp[x+1][y+1]>=0) q=dp[x+1][y+1];
else q=dfs(x+1,y+1);
dp[x][y]=max(q,p) + mp[x][y];
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
for(int j=1;j<=i;++j) scanf("%d",&mp[i][j]),dp[i][j]=-1;
dfs(1,1);
cout<<dp[1][1]<<endl; return 0;
}
by Sky_valley @ 2018-05-15 21:32:41
我把dfs中最后一句 换成
return dp[x][y]=max(q,p) + mp[x][y];
就A掉了,但不懂是为什么.
by Sky_valley @ 2018-05-15 21:35:42
仿佛失了智
by memset0 @ 2018-05-15 21:38:06
因为你的dfs是需要返回值的啊
if(dp[x+1][y]>=0) p=dp[x+1][y];
else p=dfs(x+1,y);
by 不到前10不改名 @ 2018-05-15 21:38:41
@Sky_valley 这样打貌似只会返回一层吧~
by Sky_valley @ 2018-05-15 21:51:46
谢谢啦,发现了,这样打没有返回值……