当前位置:网站首页>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 * n
matrixseats
representing 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:
seats
contains only the characters'.' and
'#'
m == seats.length
n == seats[i].length
1 <= m <= 8
1 <= n <= 8
Source: 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;}}
边栏推荐
- 进程在用户态和内核态的区别[独家解析]
- GCC: Shield dependencies between dynamic libraries
- [Machine Learning] 21-day Challenge Study Notes (2)
- torch.autograd.grad求二阶导数
- 硬实力和软实力,哪个对测试人来说更重要?
- DHCP的工作过程
- AI+小核酸药物|Eleven完成2200万美元种子轮融资
- GCC: compile-time library path and runtime library path
- Software Testing Interview Questions: What do test cases usually include?
- 习题:选择结构(一)
猜你喜欢
随机推荐
居民用水问题
缺陷检测(图像处理部分)
4. PCIe 接口时序
MySQL3
ora-00604 ora-02429
BC(转)[js]js计算两个时间相差天数
[Machine Learning] 21-day Challenge Study Notes (2)
方法重写与Object类
测试工作这么难找吗?今年32,失业2个月,大龄测试工程师接下来该拿什么养家?
Difference between MBps and Mbps
If capturable=False, state_steps should not be CUDA tensors
(十七)51单片机——AD/DA转换
4. PCIe interface timing
Day Fourteen & Postman
GCC:编译时库路径和运行时库路径
DDOS攻击真的是无解吗?不!
【Word】Word公式导出PDF后出现井号括号#()错误
torch.autograd.grad finds the second derivative
Activity Recommendation | Kuaishou StreamLake Brand Launch Conference, witness together on August 10!
Why is this problem reported when installing oracle11