有剪枝
2024-08-16 16:50:09
发布于:浙江
8阅读
0回复
0点赞
这个代码的时间复杂度降到了O(T+p*p),超快的
#include<bits/stdc++.h>
using namespace std;
int t,p;
bool vis[1010][1010][4];
int f[1010][1010][4];
int dfs(int x,int y,int z){
if(f[x][y][z]>0)return f[x][y][z];
if(vis[x][y][z]==1)return 0;
if(x==0)return 1;
if(y==0)return 2;
vis[x][y][z]=1;
if(z==1)return f[x][y][z]=dfs((x+y)%p,y,2);
else return f[x][y][z]=dfs(x,(x+y)%p,1);
}
int main(){
memset(f,-1,sizeof f);
scanf("%d%d",&t,&p);
while(t--){
int x,y;
scanf("%d%d",&x,&y);
int ans=dfs(x,y,1);
if(ans==0)cout<<"error"<<endl;
else cout<<ans<<endl;
}
return 0;
}
这里空空如也
有帮助,赞一个