码迷,mamicode.com
首页 > 其他好文 > 详细

伪装,组合问题枚举

时间:2017-06-06 14:26:50      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:***   main   fine   amp   struct   答案   each   size   int()   

******************************先写第一个版本,假设手中的牌没有重复的*************************

#include<cstdio>
#include<vector>
#include<stack>
#include<algorithm>

using namespace std;


#define    MN 20
#define MM 10
int pai[MN+1];


struct rst
{
    vector<int> data;
    void addElement(int &v_ele) { data.push_back(v_ele); }
    void print() 
    {
        for (int i = 0; i < data.size(); i++)
        {
            if (i)printf(" ");
            printf("%d", data[i]);
        }
    }
};

struct rstSet
{
    vector<rst> data;
    void addRst(const rst &v_rst) { data.push_back(v_rst); }
    void clear() { data.clear(); }
    void addPreSet(rstSet v_preSet, int v_pai)
    {
        for each(const rst &singleRst in v_preSet.data)
        {
            rst newRst = singleRst;
            newRst.addElement(v_pai);
            data.push_back(newRst);
        }
    }
};

rstSet dp[MM][MN];

void solve(int m,int n)
{
    for (int j = 1; j < n; j++)
    {
        rstSet &theSet = dp[1][j];
        theSet.clear();
        rst newRst;
        newRst.addElement(pai[j]);
        theSet.addRst(newRst);
        dp[1][j] = theSet;
    }

    for (int i = 2; i <= m; i++)
    {
        for (int j = i; j <= n; j++)
        {
            rstSet &theSet = dp[i][j];
            theSet.clear();
            for (int k = i-1; k < j; k++)
            {
                theSet.addPreSet(dp[i - 1][k], pai[j]);
            }
        }
    }
    printf("答案:\n");
    int cnt = 0;
    for (int i = m; i <= n; i++)
    {
        for (int j = 0; j < dp[m][i].data.size(); j++)
        {
            printf("#%d: ", ++cnt);
            dp[m][i].data[j].print();
            printf("\n");
        }
    }

}





int main()
{
    int m, n;
    while (~scanf("%d%d", &m, &n))
    {
        for (int i = 1; i <= n; i++)
        {
            scanf("%d", &pai[i]);
        }
        sort(pai, pai + n);
        solve(m, n);
    }
    return 0;
}
/*
3 5
1 2 3 4 5
5 10
1 2 3 4 5 6 7 8 9 10


*/

 

伪装,组合问题枚举

标签:***   main   fine   amp   struct   答案   each   size   int()   

原文地址:http://www.cnblogs.com/mizime/p/6950921.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!