当前位置:网站首页>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;}} 边栏推荐
- Exercise: Selecting a Structure (1)
- 硬实力和软实力,哪个对测试人来说更重要?
- Use of pytorch: Convolutional Neural Network Module
- 动态规划/背包问题总结/小结——01背包、完全背包
- 深度学习原理学习小结 - Self-Attention/Transformer
- KingbaseES V8 GIS数据迁移方案(2. Kingbase GIS能力介绍)
- Dynamic Programming/Knapsack Problem Summary/Summary - 01 Knapsack, Complete Knapsack
- tcp中的三次握手与四次挥手
- 创意代码表白
- 【Redis】Linux下Redis安装
猜你喜欢
随机推荐
Methods commonly used interface automation test framework postman tests
[Machine Learning] 21-day Challenge Study Notes (2)
sqlite--nested exception is org.apache.ibatis.exceptions.PersistenceException:
KingbaseES V8 GIS数据迁移方案(2. Kingbase GIS能力介绍)
进程在用户态和内核态的区别[独家解析]
day14--postman interface test
数仓4.0(三)------数据仓库系统
创意代码表白
【翻译】CNCF对OpenTracing项目的存档
硬实力和软实力,哪个对测试人来说更重要?
3. pcie.v file
为什么他们选择和AI恋爱?
MongoDB construction and basic operations
Lattice PCIe Learning 1
【Word】Word公式导出PDF后出现井号括号#()错误
如何用 Solidity 创建一个“Hello World”智能合约
【TA-霜狼_may-《百人计划》】图形4.3 实时阴影介绍
AI+PROTAC|dx/tx完成500万美元种子轮融资
蓝牙Mesh系统开发五 ble mesh设备增加与移除
A new technical director, who calls DDD a senior, is convinced


![[Redis] Redis installation under Linux](/img/84/7791a87ff976be15b455f6ddc05bf2.png)






