日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

组合搜索问题

發布時間:2025/3/19 编程问答 9 豆豆
生活随笔 收集整理的這篇文章主要介紹了 组合搜索问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

組合搜索

  • 患有嚴重過敏癥的朋友

患有嚴重過敏癥的朋友

題目大意
某家恰逢喬遷之喜,想請n名朋友到新家吃飯。主人會做的m種菜肴中,有些菜肴朋友們吃了會過敏,所以不能隨意做幾個菜敷衍了事。下表展示了主人會做的菜品和朋友們不能吃的菜肴。
現在要讓每個朋友都至少能吃到1種不會過敏的菜,那么至少要做幾道呢?依據上面的表格,沒有一種讓每個朋友都能享用的菜,所以至少要做兩道菜才能滿足要求。比如做披薩和銅包肉,或炒雜菜和炸雞塊。給出朋友們的信息時,試編寫程序求出至少需要做幾道菜。

int n,m; //canEat[i]:第i個朋友能品嘗的菜肴集合 //eaters[i] :能夠品嘗第i道菜的朋友集合vector<int>canEat[50],eaters[50]; int best; // chosen:已選擇的菜肴個數 //edible : 已選菜肴中第i個朋友能夠品嘗的菜肴個數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年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的组合搜索问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。