数的拆分,多少种拆分方法
空间复杂度小于200000kB,
时间复杂度小于2000ms。
设f(x) = A1 + Bx + Cx^2 + Dx^3 假设存在A,B,C,D,在x= 2时 使得 f(x)等于5
求A,B,C,D
从A开始 A=0,....A=5;
回溯 A=0,B=1,继续求 直到A=3 B=1
...
#include<stdio.h>
#include<math.h>
#pragma warning(disable:4996)
int arrs[20] = { 0 };
int target = 0;
int power = 0;
int now = 0;
int getPower() {
int res = 0;
for (int i = 20; i > 0; i--) {
if (pow(2, i) - target <= 0) {
res = i;
return res;
}
}
return 0;
}
int dfs() {
int sum = 0;
for (int i = 0; i < 20; i++) {
if (arrs[i]) {
sum += arrs[i] * pow(2, i);
}
}
if (sum == target) {
for (int i = 0; i < 20; i++) {
printf("%d ", arrs[i]);
}
printf("\n");
if (pow(2, now) * arrs[now] >= pow(2, power)) {
now++;
}
for (int i = 0; i < now; i++) {
arrs[i] = 0;
}
arrs[now]++;
dfs();
}
else if(sum <= target){
++arrs[0];
dfs();
}
else {
return 0;
}
return 0;
}
int main() {
scanf("%d", &target);
power = getPower();
arrs[0] = 0;
dfs();
return 0;
}