[ABC265E] Warp
题目
读完题之后很容易设
可是发现并不是的,因为
这时候又看到
所以说当前的位置就是:
还有一个地方需要处理,因为题目中
code
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
const int mod=998244353;
int n,m;
long long A,B,C,D,E,F;
int f[302][302][302];
map<long long,int> vi;
long long ans=0;
int main()
{
scanf("%d%d",&n,&m);
scanf("%lld%lld%lld%lld%lld%lld",&A,&B,&C,&D,&E,&F);
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
vi[x*1e9+y]=1;
}
f[0][0][0]=1;
for(int i=0;i<=n;i++)//注意从0开始,因为可能一次都不用
{
for(int j=0;j<=n;j++)
{
if(i+j<=n)//小优化
{
for(int k=0;k<=n;k++)
{
if(i+j+k<=n)
{
if(vi[(i*A+j*C+k*E)*1e9+i*B+j*D+k*F]==1) continue;
if(i-1>=0) f[i][j][k]=(f[i][j][k]+f[i-1][j][k])%mod;
if(j-1>=0) f[i][j][k]=(f[i][j][k]+f[i][j-1][k])%mod;
if(k-1>=0) f[i][j][k]=(f[i][j][k]+f[i][j][k-1])%mod;
if(i+j+k==n)
ans=(ans+f[i][j][k])%mod;
}
}
}
}
}
printf("%lld\n",ans);
return 0;
}