输出格式
输出包括1行,为字典序最小的那个答案。
当无解的时候,请什么也不输出。(好奇葩啊)
输入输出样例
输入 #14 16输出 #1
3 1 2 4
AC代码
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int n,sum,flag; 5 int a[13],yh[13][13],vis[13]; 6 7 void dfs(int step,int ans){ 8 if(ans>sum||flag)return; 9 if(ans==sum&&step==n+1){ 10 for(int i=1;i<=n;i++){ 11 cout<<a[i]<<" "; 12 } 13 flag=1; 14 return; 15 } 16 else for(int i=1;i<=n;i++) 17 if(vis[i]==0){ 18 a[step]=i; 19 vis[i]=1; 20 dfs(step+1,ans+i*yh[n][step]);//表示前(i+1)个数的 和 21 vis[i]=0; 22 } 23 } 24 25 int main(){ 26 cin>>n>>sum; 27 yh[1][1]=1; 28 for(int i=2;i<=n;i++) //构造杨辉三角 29 for(int j=1;j<=i;j++) 30 yh[i][j]=yh[i-1][j-1]+yh[i-1][j]; 31 dfs(1,0); 32 return 0; 33 }
题解:
这道题 本极弱 做了一天 然鹅 这个题解 说实话 和我一点关系都没有 全是来自大佬的洛谷题解 先是找规律 然后找了半天后我也没有看出来 看了大佬的题解之后 哦 原来是杨辉三角
//杨辉三角的递推式是: yhsj[i][j] = yhsj[i-1][j-1] + yhsj[i][j-1] 来自大佬总结
...
这辈子都不想写搜索了