标签:algorithm 有一个 += src 描述 pac color int 需要
num[0]= 1001 ,1、4号玩具
num[1]= 0 ,不需要玩具
num[2]= 101 ,1、3号玩具
num[3]= 1110 ,2、3、4号玩具
num[4]=11000 ,4、5号玩具
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; const int kMax = 100 + 10; int num[kMax]; int main() { int mx=0; int n,m,k; //n个小朋友 买m个玩具 共用k个玩具 int a,t; cin>>n>>m>>k; for(int i=0;i<n;i++){ int cou=0; cin>>a; //每个小朋友想要的玩具个数 while(a){ cin>>t; cou+=(1<<(t-1)); //用二进制表示改小朋友想要的玩具方案 (1001表示想要4号和1号玩具) a--; } num[i]=cou; //用数组保存每个小朋友想要的玩具方案 } for(int i=0;i<(1<<k);i++){ //二进制枚举 int count=0; for(int j=0;j<k;j++){ if(i&(1<<j)) count++; //表示求i中的1的个数 即求i方案需要玩具个数 } if(count==m){ //满足购买的玩具等于m才符合要求 int peo=0; //每种方案满足小朋友个数 for(int j=0;j<n;j++){ //遍历每个小朋友的方案 是否和枚举的i方案相同 if((i|num[j])==i){ // |运算表示两个位有一个1,结果位就是1 (i|num[j])==i表示i方案大于等于num[j]的方案数 peo++; } } mx=max(mx,peo); //结果取满足最多人数的方案 } } cout<<mx; return 0; }
标签:algorithm 有一个 += src 描述 pac color int 需要
原文地址:https://www.cnblogs.com/xusi/p/12383912.html