LeetCode 1601. 最多可达成的换楼请求数目(回溯+剪枝)
文章目錄
- 1. 題目
- 2. 解題
 
1. 題目
我們有 n 棟樓,編號(hào)從 0 到 n - 1 。每棟樓有若干員工。由于現(xiàn)在是換樓的季節(jié),部分員工想要換一棟樓居住。
給你一個(gè)數(shù)組 requests ,其中 requests[i] = [fromi, toi] ,表示一個(gè)員工請求從編號(hào)為 fromi 的樓搬到編號(hào)為 toi 的樓。
一開始 所有樓都是滿的,所以從請求列表中選出的若干個(gè)請求是可行的需要滿足 每棟樓員工凈變化為 0 。
 意思是每棟樓 離開 的員工數(shù)目 等于 該樓 搬入 的員工數(shù)數(shù)目。
 比方說 n = 3 且兩個(gè)員工要離開樓 0 ,一個(gè)員工要離開樓 1 ,一個(gè)員工要離開樓 2 ,如果該請求列表可行,應(yīng)該要有兩個(gè)員工搬入樓 0 ,一個(gè)員工搬入樓 1 ,一個(gè)員工搬入樓 2 。
請你從原請求列表中選出若干個(gè)請求,使得它們是一個(gè)可行的請求列表,并返回所有可行列表中最大請求數(shù)目。
示例 1:
 
示例 2:
 
來源:力扣(LeetCode)
 鏈接:https://leetcode-cn.com/problems/maximum-number-of-achievable-transfer-requests
 著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
2. 解題
數(shù)據(jù)規(guī)模比較小,直接暴力回溯,時(shí)間復(fù)雜度 O(n?2req.length)O(n*2^{req.length})O(n?2req.length)
class Solution {int max_satisfied = 0; public:int maximumRequests(int n, vector<vector<int>>& requests) {vector<int> count(n, 0);dfs(requests, count, 0, 0);return max_satisfied;}void dfs(vector<vector<int>>& requests, vector<int>& count, int idx, int satisfied){if(satisfied+requests.size()-idx <= max_satisfied)return;//剩余的假如都可以滿足,都不可能超過最大的,剪枝if(idx == requests.size()){for(int i = 0; i < count.size(); i++){if(count[i] != 0)return;}max_satisfied = max(max_satisfied, satisfied);return;}int from = requests[idx][0], to = requests[idx][1];count[from]--;count[to]++;dfs(requests, count, idx+1, satisfied+1);//選count[from]++;count[to]--;dfs(requests, count, idx+1, satisfied);//當(dāng)前不選} };48 ms 8.8 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
 
總結(jié)
以上是生活随笔為你收集整理的LeetCode 1601. 最多可达成的换楼请求数目(回溯+剪枝)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 04.卷积神经网络 W1.卷积神经网络
- 下一篇: LeetCode 1320. 二指输入的
