时限降至2s怎么做。
卡常or优化?
code:
#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define mkp make_pair
int mod(int x) {
return x % 998244353;
}
typedef long long ll;
map <pair<int, int>, int> obs;
int n, m, a, b, c, d, e, f, dp[310][310][310], ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> m >> a >> b >> c >> d >> e >> f;
for (int i = 1; i <= m; i++) {
int x, y;
cin >> x >> y;
obs[mkp(x, y)] = 1;
}
dp[0][0][0] = 1;
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= n - i; j++) {
for (int k = 0; k <= n - i - j; k++) {
if (i == j && j == k && k == 0) continue;
int x = i * a + j * c + k * e;
int y = i * b + j * d + k * f;
if (obs[mkp(x, y)]) continue;
if (i) dp[i][j][k] = mod(dp[i - 1][j][k] + dp[i][j][k]);
if (j) dp[i][j][k] = mod(dp[i][j - 1][k] + dp[i][j][k]);
if (k) dp[i][j][k] = mod(dp[i][j][k - 1] + dp[i][j][k]);
if (i + j + k == n) ans = mod(ans + dp[i][j][k]);
}
}
}
cout << ans;
return 0;
}