规律题,挂一个暴力打表的代码。

#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;

    }

}