其他分享
首页 > 其他分享> > P1118 [USACO06FEB]Backward Digit Sums G/S

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