求助
查看原帖
求助
1288333
XURUIFAN楼主2025/1/9 22:03

时限降至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;
}
2025/1/9 22:03
加载中...