LeetCode 1947. 最大兼容性评分和(状态枚举DP)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

有一份由 n 个问题组成的调查问卷,每个问题的答案要么是 0(no,否),要么是 1(yes,是)。

这份调查问卷被分发给 m 名学生和 m 名导师,学生和导师的编号都是从 0 到 m - 1 。

学生的答案用一个二维整数数组 students 表示,其中 students[i] 是一个整数数组,包含第 i 名学生对调查问卷给出的答案(下标从 0 开始)。

导师的答案用一个二维整数数组 mentors 表示,其中 mentors[j] 是一个整数数组,包含第 j 名导师对调查问卷给出的答案(下标从 0 开始)。

每个学生都会被分配给 一名 导师,而每位导师也会分配到 一名 学生。
配对的学生与导师之间的兼容性评分等于学生和导师答案相同的次数。

例如,学生答案为[1, 0, 1] 而导师答案为 [0, 0, 1] ,那么他们的兼容性评分为 2 ,因为只有第二个和第三个答案相同。
请你找出最优的学生与导师的配对方案,以 最大程度上 提高 兼容性评分和 。

给你 students 和 mentors ,返回可以得到的 最大兼容性评分和

示例 1:
输入:students = [[1,1,0],[1,0,1],[0,0,1]], mentors = [[1,0,0],[0,0,1],[1,1,0]]
输出:8
解释:按下述方式分配学生和导师:
- 学生 0 分配给导师 2 ,兼容性评分为 3- 学生 1 分配给导师 0 ,兼容性评分为 2- 学生 2 分配给导师 1 ,兼容性评分为 3 。
最大兼容性评分和为 3 + 2 + 3 = 8 。示例 2:
输入:students = [[0,0],[0,0],[0,0]], mentors = [[1,1],[1,1],[1,1]]
输出:0
解释:任意学生与导师配对的兼容性评分都是 0 。提示:
m == students.length == mentors.length
n == students[i].length == mentors[j].length
1 <= m, n <= 8
students[i][k]01
mentors[j][k]01

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-compatibility-score-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • dp[state] 老师被选择的情况是 state 的二进制位1 表示的状态时 的最大得分和
class Solution:def maxCompatibilitySum(self, students: List[List[int]], mentors: List[List[int]]) -> int:n = len(students)dp = [0 for _ in range(1<<n)]def score(x, y):return sum([1 if (xi^yi)==0 else 0 for xi, yi in zip(x, y)])# 预处理出来学生和老师的得分scores = [[0 for i in range(n)] for i in range(n)]for i in range(n):for j in range(n):scores[i][j] = score(students[i], mentors[j])# DPfor i in range(0, n): # 枚举学生样本for state in range(0, 1<<n): # 枚举老师的状态if bin(state).count('1') == i: # 老师被选的个数应该为 i 个了for j in range(n):if state&(1<<j) == 0: # j 号 老师还没有被选dp[state|(1<<j)] = max(dp[state] + scores[i][j], dp[state|(1<<j)])return dp[-1]

56 ms 14.9 MB Python3

上面是 state 是之前的状态

如果 state 是现在的状态,则代码是

class Solution:def maxCompatibilitySum(self, students: List[List[int]], mentors: List[List[int]]) -> int:n = len(students)dp = [0 for _ in range(1<<n)]def score(x, y):return sum([1 if (xi^yi)==0 else 0 for xi, yi in zip(x, y)])# 预处理出来学生和老师的得分scores = [[0 for i in range(n)] for i in range(n)]for i in range(n):for j in range(n):scores[i][j] = score(students[i], mentors[j])# DPfor state in range(1, 1<<n): # 枚举老师的状态i = bin(state).count('1')  # 老师被选的个数 i 个, 当前学生下标是 i-1for j in range(n):if state&(1<<j): # 学生 i-1 选择了 j 号 老师dp[state] = max(dp[state^(1<<j)] + scores[i-1][j], dp[state])return dp[-1]

我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

九、ES6的箭头函数

一、箭头函数的基本使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><script>// 箭头函数&#xff1a;也是一种定义函数的方式// 1.定义函…

Oracle 游标使用全解(摘抄)

1 -- 声明游标&#xff1b;CURSOR cursor_name IS select_statement2 3 --For 循环游标4 --&#xff08;1&#xff09;定义游标5 --&#xff08;2&#xff09;定义游标变量6 --&#xff08;3&#xff09;使用for循环来使用这个游标7 declare8 --类型定义9 cursor…

pydev debugger: warning: trying to add breakpoint to file that does not exist: /tmp/xxx

pycharm 在本地&#xff0c;连接远程进行 debug&#xff0c;发现报错 pydev debugger: warning: trying to add breakpoint to file that does not exist: /tmp/EPeOxSnjcK/参考过 https://blog.csdn.net/AAliuxiaolei/article/details/122792931 但是不行。 也试过清除缓存 I…

十、vue-router学习笔记——认识路由、vue-router基本使用、vue-router嵌套路由、vue-router参数传递、vue-router导航守卫、keep-alive

一、认识路由 1.1 什么是路由&#xff1f; 说起路由你想起了什么&#xff1f; 路由是一个网络工程里面的术语。 路由&#xff08;routing&#xff09;就是通过互联的网络把信息从源地址传输到目的地址的活动. — 维基百科 额, 啥玩意? 没听懂 在生活中, 我们有没有听说过路由…

汇编中调用函数(类比c

使用call 标号 ret指令来实现&#xff0c;还可实现嵌套调用 call 标号 &#xff1a; &#xff1a; 标号&#xff1a; &#xff1a; ret转载于:https://www.cnblogs.com/xuehongyang/p/5367936.html

python 基准测试(cProfile \ kcachegrind \ line_profiler \ memory_profiler)

learn from 《Python高性能&#xff08;第2版&#xff09;》 类似工具&#xff1a;pycharm profile对函数调用效率进行测试 1. 例子 一个圆周运动的动画 from matplotlib import pyplot as plt from matplotlib import animation from random import uniform import timeit…

linux内核同步机制相关收集

memory barrier http://www.wowotech.net/kernel_synchronization/memory-barrier.html转载于:https://www.cnblogs.com/sstudy-linux/p/5368870.html

纯粹的python优化(数据结构、cache、推导、生成器)

learn from 《Python高性能&#xff08;第2版&#xff09;》 1. 数据结构与算法 列表、双端队列 list 底层是数组&#xff0c;在 开头 插入和删除的时间复杂度 O(n)&#xff0c; 在结尾插入和删除是 O(1)&#xff0c;访问任意元素是 O(1)deque 底层是 双向链表实现&#xff…

解决在vue init webpack my-project卡住的问题(已解决)

执行vue init webpack test命令&#xff1a; 然后cd test&#xff0c;然后cnpm install 或者 npm install --registryhttps://registry.npm.taobao.org 然后执行 npm run dev命令&#xff1a;

error_reporting

定义和用法&#xff1a;error_reporting() 设置 PHP 的报错级别并返回当前级别。 语法&#xff1a;error_reporting(report_level) 如果参数 level 未指定&#xff0c;当前报错级别将被返回。 任意数目的以上选项都可以用“或”来连接&#xff08;用 OR 或 |&#xff09;&#…

十一、案例:TabBar的封装

0、案例效果演示&#xff1a; 一、TabBar实现思路 如果在下方有一个单独的TabBar组件&#xff0c;你如何封装 自定义TabBar组件&#xff0c;在APP中使用 让TabBar出于底部&#xff0c;并且设置相关的样式 TabBar中显示的内容由外界决定 定义插槽 flex布局平分TabBar 自定义Ta…

POJ 3126 Prime Path

水题&#xff1a;直接判断素数bfs 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 #include <sstream>5 #include <algorithm>6 #include <list>7 #include <map>8 #include <vector>9 #include <queue&g…

Mysql timestamp字段自动更新 踩坑记录

start_time timestamp comment 开始时间, finish_time timestamp comment 结束时间,上面的创建 Mysql table 的语句&#xff0c;在更新表的其他字段的时候&#xff0c;我发现 start_time 字段自动变成了执行 sql 时的时间 经过探索发现&#xff0c;给字段加个默认值 NULL 可…

TCP中间件_个人方案

按照功能分类&#xff0c;不管是直接的 insert/delete/update/select语句 还是 调用存储过程&#xff0c;基本的功能 就是 增删改查。又分为两大类: (1)、查询(会返回结果集的)&#xff0c;(2)、非查询(不会返回结果集的&#xff0c;只会返回生效的记录的条数)。 注意(1): 双方…

十二、Promise的学习笔记(Promise的基本使用、链式编程、all())

一、认识Promise ES6中一个非常重要和好用的特性就是Promise 但是初次接触Promise会一脸懵逼&#xff0c;这TM是什么东西&#xff1f;看看官方或者一些文章对它的介绍和用法&#xff0c;也是一头雾水。 Promise到底是做什么的呢&#xff1f; Promise是异步编程的一种解决方…

十三、Vuex学习笔记

一、Vuex是做什么的? 官方解释&#xff1a;Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 它采用 集中式存储管理 应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension&#xf…

SQL Server2008附加数据库失败

今天旁晚时分&#xff0c;我准备把老师在上课时候发给我们的一个数据库附加到我的SQL Server2008上面去&#xff0c;本来在学校机房用的SQL Server2000是很顺利地就成功了&#xff0c;但是把*.mdf文件附加到我的08上就不行了&#xff0c;出现了下面的问题&#xff08;图是我 百…

数据解析学习笔记(正则解析、bs4解析、xpath解析)

聚焦爬虫:爬取页面中指定的页面内容。 - 编码流程&#xff1a; - 指定url - 发起请求 - 获取响应数据 - 数据解析 - 持久化存储 数据解析分类&#xff1a; 正则bs4xpath&#xff08;***&#xff09; 数据解析原理概述&#xff1a; - 解析的局部的文本内容都会在标签之间或者标…

Rasa NLU 实践

文章目录1. 目录结构2. nlu.yml3. config.yml4. domain.yml5. 实践learn from https://github.com/Chinese-NLP-book/rasa_chinese_book_code 1. 目录结构 2. nlu.yml version: "3.0" nlu:- intent: greetexamples: |- 你好- hello- hi- 喂- 在么- intent: goodbye…

字符串数组判断数字,字母汉字,

c中判断字符串是否为数字的方法:cout << "请输入一个整数数组&#xff08;不超过1000个&#xff09;&#xff1a;" << endl;17 cin >> arr[0];18 while (getchar() ! \n)19 {20 cin >> arr[num];21 num;22 …