萌新刚学 OI,求助昨晚的 ABC265 E
  • 板块学术版
  • 楼主蒟蒻炒扇贝
  • 当前回复14
  • 已保存回复14
  • 发布时间2022/8/22 10:10
  • 上次更新2023/10/27 14:13:39
查看原帖
萌新刚学 OI,求助昨晚的 ABC265 E
19228
蒟蒻炒扇贝楼主2022/8/22 10:10

赛时我写过类似于题解里的第一种 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);
}
2022/8/22 10:10
加载中...