递归是不是都会超时?我的样例3,4超时了

P1002 [NOIP2002 普及组] 过河卒

@[homlin](/user/1281184) 应该会超时。本题正解DP
by hexuchen @ 2024-02-13 11:40:12


@[homlin](/user/1281184) 首先要用long long 其次可以加一个数组做记忆化,以免重复搜索
by wangruiqi36 @ 2024-02-13 13:12:46


@[wangruiqi36](/user/953506) ```#include <iostream> #include <cmath> #include <cstring> using namespace std; int n=0,m=0,x=0,y=0; long long memo[100][100]; bool failOrNot(int zx,int zy) { if(zx>n||zy>m)return 1; if(zx==x&&zy==y)return 1; if(abs(zx-x)==2&&abs(zy-y)==1)return 1; if(abs(zx-x)==1&&abs(zy-y)==2)return 1; return 0; } long long fn(int zx,int zy) { if(failOrNot(zx,zy))return 0; if(zx==n&&zy==m)return 1; if(memo[zx][zy]!=-1)return memo[zx][zy]; memo[zx][zy]=fn(zx+1,zy)+fn(zx,zy+1); return memo[zx][zy]; } int main() { cin>>n>>m>>x>>y; memset(memo,-1,sizeof(memo)); cout<<fn(0,0); return 0; } `````` 感谢,这个可以快速算出最大96×96的棋盘路线
by homlin @ 2024-02-13 14:19:57


还没学dp。。我马上学
by homlin @ 2024-02-13 14:25:40


同递归3、4超时
by Acce2934 @ 2024-02-22 12:48:36


|