力扣每日一题---1601. 最多可达成的换楼请求数目

这次的周赛我就不讲了,比较简单,没什么好讲的。

这题我们在思考的时候,是不是会发现一个问题,数据量这么小,会不会是暴搜呢?这个

问题我们先存着,等之后我们在讨论!!但是应该不是动归,动归和贪心题目数据量一般没这么小!!

先理解下题意,我们这题说有n个地点,并且本题最重要的一点就是n个地点中,比如1号点有3

人,a,b,c,那么当a,b,c去了其他点的话,那么必须要有其他人来1号点,也就是当前点离开的人数一定要等于到当前点的人数,否则就不成立。那么有了一个点有离开人数和到达人数,那么我们是不是想到并查集中的入度和出度,是不是对应离开人数和到达人数,当出度等于入度时条件成立,那么这题用并查集的入度和出度思想,是不是就可以判断当前状态合法,但是我们现在又有个问题,就是哪个状态才是符合最大这个条件,那么截止我们目前解决必要条件中的某一个条件就是怎么解决这个方案是否,那么第二个条件就是哪个状态才是符合最大。这就是我们的首要解决的问题了,我们在回到我们之前的数据量这个上面,这个数据量最多才20,那么是不是可以把状态全部枚举出来,算了一下复杂度是够的,那么解决必要条件的方法都已经知道了。

那么就可以通过算法这个充分条件去解决必要条件了,通过状态压缩来枚举状态。

cpp 复制代码
class Solution {
public:
    int lowbit(int x) {
        return x & (-x);
    }

    int get_cnt(int x) {
        int res = 0;
        while (x) {
            x -= lowbit(x);
            res++;
        }
        return res;
    }

    int maximumRequests(int n, vector<vector<int>>& requests) {
        int m = requests.size();
        int ans = 0;
        auto check = [&](int x) -> bool {
            int din[21] = {0};  // 使用数组din和dou
            int dou[21] = {0};
            int sum = 0;
            for (int i = 0; i < 16; i++) {
                if (x >> i & 1) {
                    int a = requests[i][0], b = requests[i][1];
                    dou[a]++;
                    din[b]++;
                }
            }
            bool flag = false;
            for (int i = 0; i < n; i++) {
                if (dou[i] != din[i]) {
                    flag = true;
                }
            }
            return !flag;
        };

        for (int state = 0; state < (1 << m); state++) {
            int cnt = get_cnt(state);
            if (cnt <= ans) continue;
            if (check(state)) ans = cnt;
        }
        return ans;
    }
};
相关推荐
云卓SKYDROID9 分钟前
除草机器人算法以及技术详解!
算法·机器人·科普·高科技·云卓科技·算法技术
半盏茶香33 分钟前
【C语言】分支和循环详解(下)猜数字游戏
c语言·开发语言·c++·算法·游戏
徐子童37 分钟前
双指针算法习题解答
算法
想要打 Acm 的小周同学呀1 小时前
LRU缓存算法
java·算法·缓存
阑梦清川1 小时前
在鱼皮的模拟面试里面学习有感
学习·面试·职场和发展
劲夫学编程2 小时前
leetcode:杨辉三角
算法·leetcode·职场和发展
毕竟秋山澪2 小时前
孤岛的总面积(Dfs C#
算法·深度优先
浮生如梦_4 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
励志成为嵌入式工程师6 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
师太,答应老衲吧6 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode