为什么这样?

P2822 [NOIP2016 提高组] 组合数问题

卡数据了吧
by maple_trees_112 @ 2023-09-28 23:14:06


@[__W_C__](/user/1041338) 可能是你的写法有些奇怪,我这么写开2001*2001大小是可以通过的。 ```cpp #include<iostream> using namespace std; const long long MAXN = 2e3 + 1,MAXM = 2e3; long long n,m,k,t,c[MAXN][MAXN],d[MAXN][MAXN]; int main(){ cin >> t >> k; for (long long i = 0; i <= MAXM; i++) { c[i][0] = 1; for (long long j = 1; j <= i; j++) { c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % k; } } for (long long i = 0; i <= MAXM; i++){ for (long long j = 1; j <= i; j++){ d[i][j] = d[i][j - 1] + !c[i][j]; } } while (t--){ cin >> n >> m; long long ans = 0; for (long long i = 1; i <= n; i++){ ans += d[i][min(i,m)]; } cout << ans << '\n'; } return 0; } ```
by heyx0201 @ 2023-09-28 23:39:27


`dp[i][i + 1] = dp[i][i];` `i+1` 可以是 2001,就寄了。所以需要开到 2002。
by Anamnesis @ 2023-09-28 23:41:53


```cpp dp[i][i + 1] = dp[i][i]; ``` 答咩,i + 1 会炸的咩
by _qwe_wzj_ewq_ @ 2023-09-29 07:53:52


|