• cogs 26. 分组


    26. 分组

    ★   输入文件:dataa.in   输出文件:dataa.out   简单对比
    时间限制:1 s   内存限制:128 MB
    【问题描述】

    现有 n 个学生, 要分成X1 ,X2 ,...,Xm ,共 m 组(m<=n, X1 ,X2 ,...,Xm 分别表示每组的学生人数),要求对于所有的i < j,Xi <= Xj ,共有多少种分组方案,求出分组方案。

    【输入格式】

    输入文件:dataa.in

    只有一行:两个整数n,m(1<=n<=20 1<m<=10)

    【输出格式】

    输出文件:dataa.out

    输出若干行,第一行是一个整数,表示分组方案数量.下面每行为一种分组方案,按字典序分组输出,每行的数与数之间用一个空格隔开。

    【输入样例】

    输入文件名: dataa.in

    6 3

    输出文件名: dataa.out


    1 1 4 
    1 2 3 
    2 2 2 

    思路:爆搜可过。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int m,n,sum,ans;
    int a[10000];
    int anss[1000][1000] ;
    void dfs(int sub){
        if(sub==n+1&&sum==m){
            ans++; 
            for(int i=1;i<=n;i++)
                anss[ans][i]=a[i];
            return ;
        }
        if(sub==n+1&&sum!=m)    return;
        for(int i=a[sub-1];i<=m;i++){
            sum=sum+i;
            a[sub++]=i;
            dfs(sub);
            sub--;
            sum=sum-i;
        }
    }
    int main(){
        freopen("dataa.in","r",stdin);
        freopen("dataa.out","w",stdout);
        scanf("%d%d",&m,&n);
        a[0]=1;
        dfs(1);
        cout<<ans<<endl;
        for(int i=1;i<=ans;i++){
            for(int j=1;j<=n;j++)
                cout<<anss[i][j]<<" ";
            cout<<endl;
        }
        return 0;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    码农提高工作效率-黄博文
    myeclipse与tomcat,运行jsp程序
    Ultraedit和写字板修改Tomcat 6.0的server.xml不生效
    MySQL5.5.33对应的JDBC驱动包怎样使用?
    Java是用JDBC连接MySQL数据库
    myeclipse trial expired暂时解决办法
    Json数据使用及学习方法
    在C#中使用json字符串
    vs2012换肤功能,vs2012主题及自定义主题
    给Notepad++换主题
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7732366.html
Copyright © 2020-2023  润新知