求调
查看原帖
求调
696431
lijunxi1楼主2023/8/16 22:45
#include<bits/stdc++.h>
using namespace std;
int n,ans[10005],cd;
bool yx;
void iddfs(int c,int mc)
{
	if(!yx)return;
	if(c==mc)
	{
		for(int i=c-1;i>=1;i--)
		{
			for(int j=c-1;j>=1;j--)
			{
				if(ans[i]+ans[j]==n&&ans[i]+ans[j]>ans[c-1])
				{
					
					ans[c]=n;
					yx=0;
					return;
				}
				if(ans[i]+ans[j]<=ans[c-1])break;
			}
		}
		return;
	}
	for(int i=c-1;i>=1&&yx;i--)
	{
		for(int j=i;j>=1&&yx;j--)
		{
			if(ans[i]+ans[j]<=n)
			{
				int sum=ans[i]+ans[j];
				for (int k=c+1;k<=mc;k++)sum*=2;
				if(sum<n)continue;
				ans[c]=ans[i]+ans[j];
				iddfs(c+1,mc);
			}
		}
	}
}
int main ( )
{
	
	ios::sync_with_stdio(false);
	while(cin>>n)
	{
		yx=1;
		if(n==0)return 0;//114514191981011451419198101145141919810114514191981011451419198101145141919810114514191981011451419198101145141919810114514191981011451419198101145141919810114514191981011451419198101145141919810114514191981011451419198101145141919810; 
		else if(n==1)cout<<"1\n";
		else
		{
			ans[1]=1;
			for(cd=log2(n)+0.999999999999999999;yx;cd++)iddfs(2,cd);
			for(int j=1;j<cd;j++)cout<<ans[j]<<" ";
			cout<<"\n";
		}
		
	}
}
2023/8/16 22:45
加载中...