re了,我感觉没有啥问题

P1358 扑克牌

我知道要%10007,但是我想知道哪里re了
by kaito_936 @ 2024-04-14 13:49:39


@[kaito_936](/user/1180146) re的原因就是你没%10007
by wuboyan714 @ 2024-04-14 13:52:29


@[wuboyan714](/user/1145476) 加在哪,我加后面没啥变化
by kaito_936 @ 2024-04-14 13:54:33


@[kaito_936](/user/1180146) 哪里都加,比如c函数返回时
by wuboyan714 @ 2024-04-14 13:58:21


@[wuboyan714](/user/1145476) 都加了,是不是那个u和d爆了啊
by kaito_936 @ 2024-04-14 14:01:33


@[wuboyan714](/user/1145476) 我先去吃个饭,加油dalao,我的希望就寄托在你身上了,关注了
by kaito_936 @ 2024-04-14 14:03:16


``` #include <iostream> using ll = long long; using namespace std; ll dp[101][10001], n, m,temp,sum; // 计算组合数C(down, up),并取模10007 // 参数down为下标,up为上标 // 返回值为C(down, up)对10007取模的结果 ll C(int down, int up) { if (up == 0) return 1; ll u = 1, d = 1; for (int i = 0; i < up; i++) u *= down-- % 10007; // 计算分子 for (int j = up; j > 0; j--) d *= j % 10007; // 计算分母 return u * (ll)(1 / d) % 10007; // 返回结果 } int main() { cin >> n >> m; // 输入n和m的值 // 初始化动态规划数组 for (int j = 0; j <= n; j++) dp[0][j] = 1; // 迭代计算动态规划数组 for (int i = 1; i <= m; i++) { cin >> temp; // 输入第i个数的值 sum += temp % 10007; // 更新当前和取模的值 for (int j = 0; j <= n; j++) { // 更新动态规划数组的值 if (j < sum) dp[i][j] = 0; else dp[i][j] = dp[i - 1][j] % 10007 * C(j-sum+temp,temp); cout << dp[i][j] % 10007 << " "; // 输出中间结果 } } cout << dp[m][n] % 10007 << endl; // 输出最终结果 return 0; } ``` 这样不会RE @[kaito_936](/user/1180146)
by wuboyan714 @ 2024-04-14 15:14:14


@[wuboyan714](/user/1145476) 感谢感谢
by kaito_936 @ 2024-04-14 15:23:50


@[wuboyan714](/user/1145476) 不行啊,这样求组合数会爆,我已经换杨辉三角了。总之感谢你吧
by kaito_936 @ 2024-04-14 15:30:21


|