#include <iostream>
using namespace std;
const int N = 12;
int n, res;
int arr[N];//临时方案
int brr[59051][N];//总方案
void dfs(int x, int sum)
{
if (sum > n) return;
if (x > 10)
{
if (sum == n)
{
res++;
for (int i = 1; i <= 10; i++)
{
brr[res][i] = arr[i];
}
}
return;
}
for (int i = 1; i <= 3; i++)
{
arr[x] = i;
dfs(x + 1, sum+i);
arr[x] = 0;
}
}
int main()
{
scanf("%d", &n);
if (n<1||n > 30)
{
printf("0");
return 0; //不在范围内输出0。这一块屏蔽也可以过,可能数据不完全吧
}
dfs(1, 0);
printf("%d\n",res);
for (int i = 1; i <= res; i++)
{
for (int j = 1; j <= 10; j++)
printf("%d ", brr[i][j]);
printf("\n");
}
return 0;
}
洛谷 P2089 烤鸡(指数枚举)
于 2024-01-23 15:18:40 首次发布