如果你的代码类似这样:
#include <bits/stdc++.h>
using namespace std;
int t, k;
int c[2005][2005], s[2005][2005];
int main()
{
cin >> t >> k;
for (int i = 0; i <= 2000; i++)
c[i][0] = 1;
for (int i = 2; i <= 2000; i++)
for (int j = 1; j <= i; j++)
c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % k;
for (int i = 2; i <= 2000; i++){
for (int j = 1; j <= i; j++){
s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
if (c[i][j] == 0)
s[i][j]++;
}
s[i][i + 1] = s[i][i];
}
while (t--){
int n, m;
cin >> n >> m;
if (m > n)
m = n;
cout << s[n][m] << endl;
}
return 0;
}
那么, 你应该是5分, 其余全WA。
然而, 当你改成这样:
#include <bits/stdc++.h>
using namespace std;
int t, k;
int c[2005][2005], s[2005][2005];
int main()
{
cin >> t >> k;
for (int i = 0; i <= 2000; i++){
c[i][0] = 1;
c[i][i] = 1; //看这一行
}
for (int i = 2; i <= 2000; i++)
for (int j = 1; j < i; j++) //和这一行的符号
c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % k;
for (int i = 2; i <= 2000; i++){
for (int j = 1; j <= i; j++){
s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
if (c[i][j] == 0)
s[i][j]++;
}
s[i][i + 1] = s[i][i];
}
while (t--){
int n, m;
cin >> n >> m;
if (m > n)
m = n;
cout << s[n][m] << endl;
}
return 0;
}
怎么就AC了?