题目描述:
猪猪Hanke特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke吃鸡很特别,为什么特别呢?因为他有10种配料(芥末、孜然等),每种配料可以放1—3克,任意烤鸡的美味程度为所有配料质量之和
现在,Hanke想要知道,如果给你一个美味程度,请输出这10种配料的所有搭配方案。
题解:
递归回溯
代码如下:
#include<iostream>
using namespace std;
int n,fangan1,fangan2[10005][11],a[11];
int dfs(int t,int sum) //t表示第t个调料,sum代表当前的美味程度
{
if(t>9) //t已经遍历完
{
if(sum==n)
{
fangan1++; //方案数+1
for(int i=0;i<10;i++)
fangan2[fangan1][i]=a[i]; //第fangan1个方案的具体分配情况
}
return 0;
}
for(int i=1;i<=3;i++) //第t个配料的三种可选情况
{
if(sum+i>n) break;
a[t]=i; //保存当前分配情况
dfs(t+1,sum+i); //递归调用,查看下一种调料
}
return 0;
}
int main()
{
cin>>n;
dfs(0,0); //从第0种调料开始,当前美味程度为0
cout<<fangan1<<endl;
for(int i=1;i<=fangan1;i++) //输出所有方案
{
for(int j=0;j<10;j++)
cout<<fangan2[i][j]<<' ';
cout<<endl;
}
return 0;
}