1103 Integer Factorization (30 分)
思路有空更新
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int a[25], N, n, k, p, maxf;
vector<int> b(450), ans(450);
void dfs(int x, int len, int sumf, int sum) {
if(len > k || sum > n) return;
b[len] = x;
if(len == k && sum == n && sumf > maxf) {
maxf = sumf;
ans = b;
}
for(int i = x; i >= 1; --i)
dfs(i, len + 1, sumf + i, sum + a[i]);
}
int main() {
cin >> n >> k >> p;
for(int i = 1; ; ++i){
if(pow(i, p) > n){
N = i; break;
}
a[i] = pow(i, p);
}
dfs(N - 1, 0, 0, 0);
if(ans[1] == 0){
cout << "Impossible"; return 0;
}
printf("%d = ", n);
for(int i = 1; i <= k; ++i){
if(i != 1) printf(" + ");
printf("%d^%d", ans[i], p);
}
}