#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN = 300;
const int MAXX = 300;
const int MAXP = 1000000000;
int mod;
long long dp[MAXN + 1][MAXX + 1];
// 初始化动态规划数组
void init(int n) {
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= MAXX; ++j) {
dp[i][j] = 0;
}
}
dp[0][0] = 1; // 初始化状态,表示没有方块时有一种方式
}
// 计算组合数,使用模数运算
long long comb(int n, int k) {
if (k > n || k < 0) return 0;
long long res = 1;
for (int i = 0; i < k; ++i) {
res = res * (n - i) % mod;
res = res * pow(i + 1, mod - 2, mod) % mod;
}
return res;
}
// 动态规划求解
long long solve(int n, int x) {
init(n);
long long total = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= x; ++j) {
dp[i][j] = (dp[i][j] + dp[i - 1][j - 1]) % mod;
if (j > 1) {
dp[i][j] = (dp[i][j] + dp[i][j - 1]) % mod;
}
}
}
for (int i = 0; i <= n; ++i) {
total = (total + dp[i][x]) % mod;
}
return total;
}
int main() {
int T, p;
cin >> T >> p;
mod = p;
while (T--) {
int n, x;
cin >> n >> x;
cout << solve(n, x) << endl;
}
return 0;
}
帮忙答疑解惑一下!求求啦!