Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
173531 | B班陈乐辰 | 组合数的高精度算法 | C++ | 无测评数据 | 0 | 0 MS | 0 KB | 1459 | 2024-08-20 21:16:16 |
#include <iostream> #include <vector> #include <algorithm> using namespace std; string add(string a, string b) { // 反转从低位开始算起 reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); vector<int> r(max(a.size(), b.size()) + 1, 0); for (int i = 0; i < r.size(); i++) { r[i] += (i < a.size() ? a[i] - '0' : 0) + (i < b.size() ? b[i] - '0' : 0); r[i + 1] += r[i] / 10; r[i] %= 10; } // 将结果转成字符串 string s = ""; for (int i = r.size() - 1; i >= 0; i--) { s += to_string(r[i]); } while (s.size() > 1 && s[0] == '0') { s.erase(0, 1); } return s; } int fm(int m, int n) { if (m <= 1 || n <= 1) { return 1; } else { return fm(m - 1, n) + fm(m, n - 1); } } int main() { int m, n; cin >> m >> n; string a[m + 1][n + 1]; a[1][1] = "1"; for (int k = 3; k <= m + n; k++) { for (int i = 1; i < k; i++) { int j = k - i; if (i <= m && j <= n) { if (i == 1 || j == 1) { a[i][j] = "1"; } else { a[i][j] = add(a[i][j - 1], a[i - 1][j]); } } } } cout << a[m][n] << endl; return 0; }