用bfs推的,四个点超时
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstdio>
#include<cstring>
using namespace std;
int mi[25],cunchu[101],n;
bool mib[30];
bool b;
int sum,i;
void bfs(int step,int ht)
{
if(b==true)
{
return;
}
if(sum==n)
{
b=true;
for(int i=step-1;i>=1;i--)
{
printf("%d ",cunchu[i]);
}
return;
}
if(sum>n)
{
return;
}
for(int ij=1;ij<=ht;ij++)
{
if(mib[ij]==false)
{
cunchu[step]=mi[ij];
sum+=cunchu[step];
mib[ij]=true;
bfs(step+1,ht);
sum-=mi[ij];
mib[ij]=false;
}
}
}
int main ()
{
sum=1;
cin>>n;
if(n%2!=0)
{
printf("-1");
return 0;
}
for(i=1;sum<n;i++)
{
sum*=2;
mi[i]=sum;
}
sum=0;
bfs(1,i);
if(b==false)
{
printf("-1");
}
return 0;
}
求求啦【急】