规律题,挂一个暴力打表的代码。
#include<bits/stdc++.h>
using namespace std;
int a[1005];
int n;
int vis[2005],b[1005];
int ans;
void dfs( int x,int y )
{
if( x>n )
{
if( y==2*n )
{
ans++;
for( int i=1;i<=n;i++ ) printf("%d ",a[i]);
puts("");
}
return;
}
int i=a[x-1];
if( x==n ) i=max(2*n-y,a[x-1]);
for( ;y+(n-x+1)*i<=2*n;i++ )
{
if( b[n-i] ) continue;
vector<int> p;
for( int j=n;j>=i;j-- )
{
if( b[j-a[i]] && b[j]==0 ) b[j]=1,p.push_back(j);
}
a[x]=i;
dfs(x+1,y+i);
for( int j=0;j<p.size();j++ ) b[p[j]]=0;
}
return;
}
int main()
{
scanf("%d",&n);
a[0]=1;
b[0]=1;
// dfs(1,0);
if( n&1 )
{
for( int i=1;i<=n-1;i++ )cout<<1<<" ";
cout<<2*n-(n-1)<<endl;
for( int i=1;i<=n;i++ ) cout<<2<<" ";
}
else
{
for( int i=1;i<=n-1;i++ )cout<<1<<" ";
cout<<2*n-(n-1)<<endl;
}
} 
京公网安备 11010502036488号