問題描述
蒜廠幼兒園有n 個小朋友,每個小朋友都有自己想玩的玩具。身為幼兒園園長的你決定給幼兒園買一批玩具,由於經費有限,你只能買m 個玩具。已知玩具商店一共賣k種玩具,編號為1,2,3,…k,你讓每個小朋友把想玩的玩具編號都寫在了紙上。你希望滿足盡可能多的小朋友的需求,請計算出最多能滿足多少個小朋友的玩具需求。
輸入格式
第一行,輸入三個整數n,m,k(1≤n≤100,1≤m≤k≤15),中間用空格分開。
接下來n 行,第i+1行的第乙個數字ai代表第i 個小朋友想玩的玩具數量,接下來有ai個數字,代表這 ai個玩具的編號。
輸出格式
輸出乙個整數,表示最多能滿足多少小朋友的玩具需求。
樣例輸入
5 3 5
2 1 4
02 3 1
3 2 3 4
2 4 5
樣例輸出
3
思路:用二進位制列舉的方式列舉不同的情況(也即遍歷玩具的子集),然後判斷是否合法,然後取最大的滿足人數。
ps:列舉時應考慮超時問題,列舉變數應盡可能小,此題n較大,則應考慮列舉k而不是n。
**如下:
#include
#include
using
namespace
std;
struct a
aa[100];
int main()
int max=0;//記錄能夠滿足的小朋友數目的最大值
for(int i=0;i<(1
int b[15];//用於標記在當前子集中的玩具
memset(b,0,sizeof(b));
for(int j=0;jif(i&(1
int sum=0;//記錄能夠滿足的小朋友的數目
for(int x=0;xint flag=1;//判斷當前小朋友的要求是否被滿足
for(int y=0;y//遍歷小朋友要求的玩具
if(b[aa[x].w[y]-1]==0)
flag=0;
if(flag==1)
sum++;
}if(sum>max&&bsum<=m)
max=sum; }}
cout
0;}
幼兒園買玩具 二進位制列舉
幼兒園買玩具 蒜廠幼兒園有 nn 個小朋友,每個小朋友都有自己想玩的玩具。身為幼兒園園長的你決定給幼兒園買一批玩具,由於經費有限,你只能買 mm 個玩具。已知玩具商店一共賣 kk 種玩具,編號為 1,2,3,k1,2,3,k,你讓每個小朋友把想玩的玩具編號都寫在了紙上。你希望滿足盡可能多的小朋友的需...
二進位制列舉 計蒜客幼兒園買玩具
幼兒園有n 個小朋友,每個小朋友都有自己想玩的玩具。身為幼兒園園長的你決定給幼兒園買一批玩具,由於經費有限,你只能買 m m 個玩具。已知玩具商店一共賣 k k 種玩具,編號為 1,2,3,k1,2,3,k 你讓每個小朋友把想玩的玩具編號都寫在了紙上。你希望滿足盡可能多的小朋友的需求,請計算出最多能...
計蒜客幼兒園買玩具 二進位制列舉子集
問題描述 蒜廠幼兒園有 n 個小朋友,每個小朋友都有自己想玩的玩具。身為幼兒園園長的你決定給幼兒園買一批玩具,由於經費有限,你只能買 m 個玩具。已知玩具商店一共賣 k 種玩具,編號為 1,2,3,k,你讓每個小朋友把想玩的玩具編號都寫在了紙上。你希望滿足盡可能多的小朋友的需求,請計算出最多同時能滿...