规律题,挂一个暴力打表的代码。
#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; } }