搜索
P2089烤鸡
有10种配料,每一种配料都有三种可能:1g, 2g, 3g
所以——所有可能的种类是3^10个=59049个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| int a[11]; int res[60000][11]; int cnt=0;
void dfs(int layer,int left){ int i; if(index==11){ if(left==0){ for(int i=1;i<=10;i++)res[cnt][i]=a[i]; cnt++; } }else{ for(int i=1;i<=3&&i<=left;i++){ a[layer]=i; dfs(layer+1,left-i); } } }
int main(){ int n; cin>>n; if(n>=10||n<=30){ dfs(1,n); }else{cout<<0;} }
|
P1706 全排列
回溯
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| bool used[10]={0}; int a[10]; int n; void f(int k){ if(k==n+1){ for(int i=1;i<=n;i++){cout<<setw(5)<<left<<a[i];} cout<<endl; return; } for(int i=1;i<=n;i++){ if(!used[i]){ a[k]=i; used[i]=true; f(k+1); used[i]=false; } } }
int main(){ cin>>n; f(1); }
|