洛谷P1118 数字三角形【数论,dfs】

链接

https://www.luogu.org/problemnew/show/P1118

思路

利用杨辉三角去搜索

代码

#include
#include//exit要用到
using namespace std;
int yh[20][20],n,sum,ans[20];
bool use[14];
void dfs(int dep,int now)
{
    if(now>sum) return;//剪枝
    if(dep>n)
    {
        if(now==sum)//找到了
        {
            for(int i=1;i<=n;i++)
             printf("%d ",ans[i]);//输出答案
            exit(0);//直接推出
        }
        return;
    }
    for(int i=1;i<=n;i++)
    if(!use[i])
    {
        use[i]=true;ans[dep]=i;
        dfs(dep+1,now+yh[n][dep]*i);//深搜
        use[i]=false;
    }
}
int main()
{
    scanf("%d%d",&n,&sum);
    yh[0][0]=1;
    for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) yh[i][j]=yh[i-1][j-1]+yh[i-1][j];//初始化
    dfs(1,0);//搜索
}

你可能感兴趣的:(数论,dfs)