一:简单题
P2089 烤鸡 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
一个简单的dfs,虽然很裸但是对我(菜鸡)还是有难度。。需要注意的是要求先输出个数再输出方案数,所以我们用个二维数组把存起来,再for循环输出。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int n,a[15],b[100010][15]; 5 int ans; 6 7 void dfs(int u,int sum) 8 { 9 if(u>10) 10 { 11 if(sum==n) 12 { 13 ans++; 14 for(int i=1;i<=10;i++)b[ans][i]=a[i]; 15 } 16 return ; 17 } 18 19 for(int i=1;i<=3;i++) 20 { 21 if(sum+i>n)break; 22 a[u]=i; 23 dfs(u+1,sum+i); 24 a[u]=0; 25 } 26 } 27 28 int main() 29 { 30 31 scanf("%d",&n); 32 if(n>30||n<10)printf("0\n"); 33 else 34 { 35 dfs(1,0); 36 printf("%d\n",ans); 37 for(int i=1;i<=ans;i++) 38 { 39 for(int j=1;j<=10;j++)printf("%d ",b[i][j]); 40 printf("\n"); 41 } 42 43 } 44 45 return 0; 46 }1