zoukankan      html  css  js  c++  java
  • POJ 3187 Backward Digit Sums

    暴力DFS+验证。

    验证如果是暴力检验可能复杂度会太高,事实上可以o(1)进行,这个可以o(n*n)dp预处理。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    const int maxn=20;
    bool flag[maxn];
    bool r;
    int a[maxn];
    int n,sum;
    
    int mul[15][15];
    
    bool check(int s)
    {
        if(s==sum) return 1;
        return 0;
    }
    
    void dfs(int deep,int tot)
    {
        if(deep==n-1)
        {
            if(check(tot))
            {
                r=1;
                for(int i=0;i<=deep;i++)
                {
                    printf("%d",a[i]);
                    if(i<deep) printf(" ");
                    else printf("
    ");
                }
            }
            return ;
        }
    
        for(int  i=1;i<=n;i++)
        {
            if(flag[i]==0)
            {
                flag[i]=1;
                a[deep+1]=i;
                dfs(deep+1,tot+a[deep+1]*mul[n][deep+1+1]); if(r==1) return;
                flag[i]=0;
            }
        }
    }
    
    void init()
    {
        memset(mul,0,sizeof mul); mul[1][1]=1;
        for(int i=2;i<=10;i++)
        {
            for(int j=1;j<=10;j++) mul[i][j]=mul[i-1][j];
            for(int j=2;j<=10+1;j++) mul[i][j]=mul[i][j]+mul[i-1][j-1];
        }
    }
    
    int main()
    {
        init();
        while(~scanf("%d%d",&n,&sum))
        {
            r=0; memset(flag,0,sizeof flag);
            for(int i=1;i<=n;i++)
            {
                flag[i]=1;
                a[0]=i;
                dfs(0,a[0]*mul[n][0+1]);
                flag[i]=0;
            }
        }
        return 0;
    }
  • 相关阅读:
    Flutter
    Flutter
    项目冲刺——第二天
    练习三:用例图
    项目冲刺——第一天
    作业六:团队项目冲刺前期准备
    作业四:软件案例分析
    作业五:需求规格说明书
    【非作业部分】队内暂时安排
    第二次练习——团队展示
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5335750.html
Copyright © 2011-2022 走看看