P1118 [USACO06FEB]Backward Digit Sums G/S
作者:互联网
原题传送门
分析:杨辉三角(emmm,没了,就是它)
代码:
#include <bits/stdc++.h>
using namespace std;
int n,m;
int vis[15],f[15][15],out[15];
void dfs(int k,int s)
{
if(s>m) return ;
// 剪枝!!!
if(k>n)
{
if(s==m)
{
for(int i=1;i<=n;i++) cout<<out[i]<<' ';
exit(0);
}
return ;
}
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
vis[i]=1;
out[k]=i;
dfs(k+1,s+f[n][k]*i);
vis[i]=0;
}
}
}
int main()
{
cin>>n>>m;
f[1][1]=1;
for(int i=2;i<=12;i++)
{
for(int j=1;j<=i;j++)
{
f[i][j]=f[i-1][j]+f[i-1][j-1];
}
}
dfs(1,0);
return 0;
}
标签:15,vis,P1118,dfs,int,USACO06FEB,return,Backward,out 来源: https://blog.csdn.net/qq_51354600/article/details/113575139