数的拆分,多少种拆分方式。

数的拆分,多少种拆分方法

img

空间复杂度小于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;
}