我知道要%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