赛时我写过类似于题解里的第一种 bfs 的做法,利用的是记忆化搜索,但极限数据需要跑 6s 左右。
我感觉我的思路和题解里的差不多,不知道这个做法劣在了哪里。。。可能是 map 被调用的次数太多了?/yun
求问这个代码是否还有优化空间。如果是思路有误的话请指出。蒟蒻感激不尽/bx
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pir pair<int,int>
#define fs first
#define sc second
const int mod=998244353,MAXN=1e5+5;
void MOD(int &x)
{
if(x>=mod)x-=mod;
}
int n,A,B,C,D,E,F,m;
map<pir,int>f[305];
set<pir>s;
int dfs(int dep,int x,int y)
{
if(f[dep][pir(x,y)])return f[dep][pir(x,y)];
if(dep==n)return f[dep][pir(x,y)]=1;
int ans=0;
if(s.find(pir(x+A,y+B))==s.end())MOD(ans+=dfs(dep+1,x+A,y+B));
if(s.find(pir(x+C,y+D))==s.end())MOD(ans+=dfs(dep+1,x+C,y+D));
if(s.find(pir(x+E,y+F))==s.end())MOD(ans+=dfs(dep+1,x+E,y+F));
return f[dep][pir(x,y)]=ans;
}
signed main()
{
cin>>n>>m>>A>>B>>C>>D>>E>>F;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
s.insert(pir(x,y));
}
cout<<dfs(0,0,0);
}