组合问题的算法实现
来源:互联网 发布:哈萨克歌曲软件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;}*/
阅读全文
0 0
- 组合问题的算法实现
- 组合算法的实现
- 组合算法的实现
- 实现组合的递归算法
- 排列组合之组合问题算法实现
- 字符组合问题的分治算法
- 列组合问题的通用算法
- 拉格朗日法解机组组合问题的算法细节
- 一道组合问题的算法题
- 排列与组合的算法实现
- 全排列和组合的实现算法
- 全排列和组合的实现算法
- 组合算法的实现(递归法)
- 组合算法的实现,递归,C语言
- 打印所有的组合(组合问题C++实现)
- 组合问题算法
- 钱组合算法问题
- 组合算法问题
- 3. 什么是JSR参考实现?
- hihoCoder 二进制小数 BigDecimal使用
- 网络基础TCP/IP通信协议
- hdu1584 蜘蛛牌dfs
- 634. Find the Derangement of An Array
- 组合问题的算法实现
- CSS 盒子模型
- 【MyBatis学习04】mapper代理方法开发dao
- 数据结构(Java)--双链表
- java种复制文件的N种方法
- 教你如何使用automake生成Makefile文件
- 【LeetCode】Integer to English Words
- Head First设计模式第二章——观察者模式
- 【Linux】权限问题:su和sudo