#include<iostream>
using namespace std;
const int N=20;
int n;
int arr[N];//存临时方案
int res=0;//存方案数
int M[59055][N];//存所有方案
//x表示当前枚举到了哪一位,sum表示已经选择了的调料的总质量
void dfs (int x,int sum){
if(sum>n) return ;//剪枝
if(x>10){
if(sum==n){
res++;
for(int i=1;i<=10;i++){
M[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(){
cin>>n;
dfs(1,0);
cout<<res<<endl;
for(int i=1;i<=res;i++){
for(int j=1;j<=10;j++){
cout<<M[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
P2089烤鸡(dfs)
最新推荐文章于 2024-07-25 11:27:31 发布