生活随笔
收集整理的這篇文章主要介紹了
组合搜索问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
組合搜索
患有嚴重過敏癥的朋友
題目大意
某家恰逢喬遷之喜,想請n名朋友到新家吃飯。主人會做的m種菜肴中,有些菜肴朋友們吃了會過敏,所以不能隨意做幾個菜敷衍了事。下表展示了主人會做的菜品和朋友們不能吃的菜肴。
現在要讓每個朋友都至少能吃到1種不會過敏的菜,那么至少要做幾道呢?依據上面的表格,沒有一種讓每個朋友都能享用的菜,所以至少要做兩道菜才能滿足要求。比如做披薩和銅包肉,或炒雜菜和炸雞塊。給出朋友們的信息時,試編寫程序求出至少需要做幾道菜。
int n
,m
;
vector
<int>canEat
[50],eaters
[50];
int best
;
void search(vector
<int>&edible
,int chosen
){if(chosen
>=best
)return ;int first
= 0;while(first
<n
&& edible
[first
]>0)++first
;if(first
== n
){best
= chosen
;return;}for(int i
=0;i
<canEat
[first
].size();++i
){int food
= canEat
[first
][i
];for(int j
=0;j
<eaters
[food
].size();++j
)edible
[eaters
[food
][j
]]++;search(edible
,chosen
+1);for(int j
=0;j
<eaters
[food
].size();++j
)edible
[eaters
[food
][j
]]--;}
}
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的组合搜索问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。