组合问题的算法实现

来源:互联网 发布:哈萨克歌曲软件baigie 编辑:程序博客网 时间:2024/05/19 19:58
/*问题描述:对于一组各不相同的数字,从中任意抽取1-n个数字,构成一个新的集合。求出所有的可能的集合。例如,对于集合{1,2,3},其所有子集为{1},{2},{3},{1,2},{1,3},{2,3}{1,2,3}, 给定一个数组(元素各不相同),求出数组的元素的所有非空组合(即数组的所有非空子集)解法:位向量法。用一个辅助数组表示各个元素的状态。1表示在集合中,0表示不在数组中。递归地求解所有的子集。算法描述如下://这里的算法对空集也输出了,可修改之使得只输出非空集合。*/#include <iostream>using namespace std;void getSubset(int list[],bool v[],int a,int b){if(a == b){for(int i = 0; i < b; i++){if(v[i])cout<<list[i]<<"  ";}cout<<endl;return;}v[a] = true;getSubset(list,v,a+1,b);v[a] = false;getSubset(list,v,a+1,b);}int main(){    int li[] = {1,2,3,4};    bool v[] = { false,false,false,false};    getSubset(li,v,0,4);}/*USER_ID: icpc#2017pre2015140537PROBLEM: 1471SUBMISSION_TIME: 2017-04-02 14:37:55#include <iostream>#include <vector>#define MOD 1000000007using namespace std;vector<vector<long long> > muliMatrix(const vector<vector<long long> > &m1, const vector<vector<long long> > &m2) {    vector<vector<long long> > res(m1.size() ,vector<long long>(m2[0].size(), 0));    for (int i = 0; i < m1.size(); i++) {        for (int j = 0; j < m2[0].size(); j++) {            for (int k = 0; k < m2.size(); k++) {                res[i][j] += (m1[i][k] * m2[k][j]);            }            res[i][j] = res[i][j] % MOD;        }    }    return res;}     vector<vector<long long> > matrixPower(const vector<vector<long long> > &m, long long p) {    vector<vector<long long> > res(2 ,vector<long long>(2, 0));         for (int i = 0; i < res.size(); i++) res[i][i] = 1;    vector<vector<long long> > tmp(m);    for(; p != 0; p >>= 1) {        if ((p & 1) != 0) res = muliMatrix(res, tmp);        tmp = muliMatrix(tmp, tmp);    }    return res;}int main(){    long long n;    cin >> n;    if (n == 0) cout << 1 << endl;    else {        vector<vector<long long> > v(2, vector<long long>(2, 0));        v[0][0] = 2;        v[0][1] = 1;        v[1][0] = 3;        v[1][1] = 0;           vector<vector<long long> > res = matrixPower(v, n - 1);        cout << ((res[0][0] + res[1][0]) % MOD)<< endl;    }    return 0;}*/

原创粉丝点击