感觉没有问题了,但就是 WA,求助
#include<bits/stdc++.h>
#define MAXN 10010
using namespace std;
typedef long long ll;
ll n, m;
ll ans[MAXN];
bool dfs(int now, int limit){
if(now > limit) return ans[now - 1] == n;
if(ans[now - 1] * (1ll << (limit - now + 1)) < n) return false;
for(int i = 1; i < now; i++){
for(int j = i; j < now; j++){
ll tmp = ans[i] + ans[j];
if(tmp > n) break;
if(tmp <= ans[now - 1]) continue;
ans[now] = tmp;
if(dfs(now + 1, limit)) return true;
}
}
return false;
}
int main(){
ans[1] = 1;
while(~scanf("%lld",&n) && n){
m = 1;
while(!dfs(2, m)) m++;
for(int i = 1; i <= m; i++){
printf("%lld ",ans[i]);
}
printf("\n");
}
return 0;
}