当前位置:网站首页>1349. Maximum number of students taking the exam Status Compression
1349. Maximum number of students taking the exam Status Compression
2022-08-05 01:28:00 【Yu Niangniang】
1349. Maximum number of students taking the test
You are given a
m * nmatrixseatsrepresenting the distribution of seats in the classroom.If the seat is bad (unusable), use'#'; otherwise, use'.'.Students can see the answer sheets of students who are next to him in four directions: left, right, upper left, and upper right, but cannot see the answer sheets of students sitting directly in front or behind him.Please calculate and return the maximum number of students that the test room can accommodate to take the test together without cheating.
Students must be seated in good condition.
Example 1:
Enter:seats = [["#",".","#","#",".","#"],[".","#","#","#","#","."],["#",".","#","#",".","#"]]Output:4Explanation: The teacher can place 4 students in the available seats so they cannot cheat on the exam.Example 2:
Enter:seats = [[".","#"],["#","#"],["#","."],["#","#"],[".","#"]]Output:3Explanation: Have all students take available seats.Example 3:
Enter:seats = [["#",".",".",".","#"],[".","#",".","#","."],[".",".","#",".","."],[".","#",".","#","."],["#",".",".",".","#"]]Output:10Explanation: Have students take available seats in columns 1, 3, and 5.Tip:
seatscontains only the characters'.' and'#'m == seats.lengthn == seats[i].length1 <= m <= 81 <= n <= 8Source: LeetCode
Link: https://leetcode.cn/problems/maximum-students-taking-exam
The copyright belongs to LeetCode.com.For commercial reprints, please contact the official authorization, and for non-commercial reprints, please indicate the source.
Results of the questions
Successful, the state compresses the enumeration subset, and the length is 8 and it is finished (in fact, WA is done once, because dfs has not written memoization)
Method: State Compression + Memory Search
- Set the seat to 1 and the status to 0 to get a binary array
- Considering that there may be a large number of empty states, the dfs method can be used to process the state pressure data
- For a certain index, if the previous state is consistent, the maximum value of subsequent elements obtained must be consistent, and can be cached. The index length is 8, and the previous state is 1e8. There are 256 types in total, so store dp[8][256]
- Enumerate the subset of the current seat (binary is v), use v&(i-1), at this time the enumeration is a non-empty subset (do not enumerate the empty subset in the loop, it will be an infinite loop), the subsequent enumeration is not selected in this bank, and the occupied seat is 0.
- Specifically, the left and right translation of the current seat cannot coincide with the original allocation, that is, (i&(i<<1))==0 && (i&(i>>1))==0, or you canOnly one side is judged, because the left edge is 11. During the left shift, the leftmost is 1, and the latter is not 0, which does not affect the judgment. During the right edge shift, the right shift is 1, and the result is 1, which does not affect the judgment.
- To judge whether it is adjacent to the previous row as an allocation, it is required that the current row is shifted left and right by one position and cannot be the same as the previous row. Note that at this time, both sides must be judged, for example, 10,1 is shifted to the right by one position and 1,1 is the same as the previous row.The result is 1, but the result of a left shift is 100 and 1, not coincident
class Solution {public int maxStudents(char[][] seats) {List list = new ArrayList<>();for(char[] seat:seats){int v = 0;for(char c:seat){int curr = c=='.'?1:0;v = v*2+curr;}list.add(v);}for(int i = 0; i < 8; i++) Arrays.fill(dp[i],-1);return dfs(list,0,0);}int[][] dp = new int[8][256];private int dfs(List list,int index,int preVal){if(index==list.size()) return 0;if(dp[index][preVal]!=-1) return dp[index][preVal];int ans = 0;int v = list.get(index);for(int i=v;i>0;i=v&(i-1)){if((i&(i<<1))==0 (preVal&(i<<1))==0 && (preVal&(i>>1))==0){ans = Math.max(dfs(list,index+1,i)+Integer.bitCount(i),ans);}}ans = Math.max(ans,dfs(list,index+1,0));dp[index][preVal] = ans;return ans;}} 边栏推荐
猜你喜欢

pytorch的使用:使用神经网络进行气温预测
](/img/4d/2d81dc75433c23c5ba6b31453396f0.png)
二叉树[全解](C语言)

Getting Started with Kubernetes Networking

linux(centOs7)部署mysql(8.0.20)数据库

Gartner Hype Cycle:超融合技术将在2年内到达“生产力成熟期”
![[How to smash wool according to the music the couple listens to during the Qixi Festival] Does the background music affect the couple's choice of wine?](/img/eb/535ffaff9b535fbc73a4d56aab0b3a.png)
[How to smash wool according to the music the couple listens to during the Qixi Festival] Does the background music affect the couple's choice of wine?

方法重写与Object类

LiveVideoStackCon 2022 上海站明日开幕!

sqlite--nested exception is org.apache.ibatis.exceptions.PersistenceException:

深度学习训练前快速批量修改数据集中的图片名
随机推荐
Are testing jobs so hard to find?I am 32 this year and I have been unemployed for 2 months. What should an older test engineer do next to support his family?
行业现状?互联网公司为什么宁愿花20k招人,也不愿涨薪留住老员工~
测试工作这么难找吗?今年32,失业2个月,大龄测试工程师接下来该拿什么养家?
主库预警日志报错ORA-00270
The use of pytorch: temperature prediction using neural networks
ORA-00257
Software Testing Interview Questions: What do test cases usually include?
VOC格式数据集转COCO格式数据集
Creative code confession
创意代码表白
【PyQT5 绑定函数的传参】
工具类总结
How DHCP works
OPENWIFI实践1:下载并编译SDRPi的HDL源码
oracle create user
迅睿cms网站搬迁换了服务器后网站不能正常显示
第十四天&postman
EBS利用虚拟列及hint 提示优化sql案例一则
SAP ERP和ORACLE ERP的区别是哪些?
JVM类加载简介
