Có bao nhiêu cách phân tích số 15 9 thành tích của ba số nguyên dương, biết rằng các cách phân tích mà các nhân tử chỉ khác nhau về thứ tự thì chỉ được tính một lần?
A. 517
B. 516
C. 493
D. 492
Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.
Bạn sài Quy hoạch động đi
c++:
#include <iostream>
#include <vector>
using namespace std;
const int N = (int) 1e5 + 5;
const int MOD = (int) 1e9;
int a[N];
int n;
int main() {
cin >> n;
if (n == 0) {
cout << 0 << endl;
return 0;
}
vector<int> p;
for (int i = 1;;) {
p.push_back(i * (3 * i - 1) / 2);
if (p.back() >= n) break;
i = -i;
if (i > 0) i++;
}
a[0] = 1;
for (int i = 1; i <= n; ++i) {
int sign = 1, cnt = 0;
for (int j : p) {
if (j > i) break;
a[i] += sign * a[i - j];
if (a[i] < 0) a[i] += MOD;
if (a[i] >= MOD) a[i] -= MOD;
cnt += 1;
if (cnt == 2) {
cnt = 0;
sign = -sign;
}
}
}
cout << a[n] << endl;
return 0;
}
Phương pháp:
Chia làm ba trường hợp:
+) 3 số giống nhau.
+) 2 trong ba số giống nhau.
+) 3 số đôi một khác nhau.
Cách giải:
+) TH2: 2 trong ba số giống nhu và khác số còn lại, giả sử