ans数组一定要开得够大啊
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int ans[10008][10];//ans数组一定要开得够大啊
long long int cnt=0;
int av;
int it[10];
void solve(int d)
{
if ((10-d)*2<n) return;
//cout << d << endl;
if (!n)
{
for (int i=0; i<10; i++)
{
ans[cnt][i]=it[i];
}
//cout << endl;
cnt++;
return;
}
for (int i=0; i<=2; i++)
{
if(i<=n&&it[d]+i<=3)
{
it[d]+=i;
n-=i;
solve(d+1);
n+=i;
it[d]-=i;
}
}
}
int main ()
{
scanf("%d", &n);
av=n/10;
//n-=10;
//cout << av << ' ' << av*10 << ' ' << n << endl;
if (av>3||(av==3&&n-av*10!=0))
{
cout << 0;
return 0;
}
for (int i=0; i<10; i++)
{
it[i]=1;
}
n-=10;
//for (int i=0; i<10; i++) cout << ans[i] << ' ';
solve(0);
cout << cnt << endl;
for (int i=0; i<cnt; i++)
{
for (int j=0; j<10; j++)
{
cout << ans[i][j] << ' ';
}
cout << endl;
}
//cout << av << ' ' << av*10 << ' ' << n << endl;
return 0;
}