Cho em hỏi liệu còn cách nào tối ưu đoạn code dưới đây nhanh hơn không ạ ? Em bị TLE ở test cuối (n = 1000)
string sum(string a, string b) {
int carry = 0;
string res;
while (a.length() < b.length())
a = '0' + a;
while (b.length() < a.length())
b = '0' + b;
for (int i = a.length() - 1; i >= 0; --i) {
int d = (a[i] - '0') + (b[i] - '0') + carry;
carry = d / 10;
res = (char)(d % 10 + '0') + res;
}
if (carry) res = '1' + res;
return res;
}
string dp[1002][1002];
void solve() {
int n;
cin >> n;
for (int i = 0; i < n; ++i) dp[0][i] = "1";
for (int i = 0; i < n; ++i) dp[i][0] = "1";
for (int i = 1; i < n; ++i) {
for (int j = 1; j < n; ++j) {
dp[i][j] = sum(dp[i - 1][j], dp[i][j - 1]);
}
}
cout << dp[n - 1][n - 1];
}