二進位制列舉 幼兒園買玩具

2021-08-15 09:48:07 字數 1190 閱讀 8101

問題描述

蒜廠幼兒園有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,你讓每個小朋友把想玩的玩具編號都寫在了紙上。你希望滿足盡可能多的小朋友的需求,請計算出最多同時能滿...