刚学dp,为啥好多都TLE了

P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles

heshaoshuai @ 2022-07-19 14:23:31

#include<bits/stdc++.h>

using namespace std;

const int N=1100;

int a[N][N], dp[N][N];

int n;

int dfs(int i,int j)

{

if(i==n)return a[i][j];

return

dp[i][j]=max(dfs(i+1,j),dfs(i+1,j+1))+

a[i][j];

}

int main()

{

cin>>n;

for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) {

cin>>a[i][j];

}

} cout<<dfs(1,1);

}


by Hisaishi_Kanade @ 2022-07-19 14:24:50

@heshaoshuai 如果dp[i][j]已经有结果,直接返回即可,而不是再算一次。


by Steven_Gerrard @ 2022-07-19 15:00:49

千万不要将dp和dfs混淆,思路都不同


by shit007 @ 2022-08-24 14:02:38

用记忆化搜索


by jyz2012 @ 2023-05-06 18:34:18

你告诉我这是dp


|