当前位置:网站首页>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;}} 边栏推荐
- Exploding the circle of friends, Alibaba produced billion-level concurrent design quick notes are too fragrant
- C语言基础知识 -- 指针
- 仅3w报价B站up主竟带来1200w播放!品牌高性价比B站投放标杆!
- 4. PCIe 接口时序
- 数仓4.0(三)------数据仓库系统
- Binary tree [full solution] (C language)
- Exercise: Selecting a Structure (1)
- [Machine Learning] 21-day Challenge Study Notes (2)
- 如何发现一个有价值的 GameFi?
- pytorch的使用:使用神经网络进行气温预测
猜你喜欢

方法重写与Object类

蓝牙Mesh系统开发四 ble mesh网关节点管理

Day Fourteen & Postman

Exploding the circle of friends, Alibaba produced billion-level concurrent design quick notes are too fragrant

VOC格式数据集转COCO格式数据集

迅睿cms网站搬迁换了服务器后网站不能正常显示

JVM类加载简介

After the staged testing is complete, have you performed defect analysis?

内存取证系列1

If capturable=False, state_steps should not be CUDA tensors
随机推荐
Exercise: Selecting a Structure (1)
torch.autograd.grad求二阶导数
深度学习训练前快速批量修改数据集中的图片名
day14--postman interface test
ORA-01105 ORA-03175
oracle将restful接口封装到视图中
PCIe Core Configuration
深度学习原理学习小结 - Self-Attention/Transformer
Exploding the circle of friends, Alibaba produced billion-level concurrent design quick notes are too fragrant
[Machine Learning] 21-day Challenge Study Notes (2)
A new technical director, who calls DDD a senior, is convinced
sqlite--nested exception is org.apache.ibatis.exceptions.PersistenceException:
10年测试经验,在35岁的生理年龄面前,一文不值
tcp中的三次握手与四次挥手
Memory Forensics Series 1
Dynamic Programming/Knapsack Problem Summary/Summary - 01 Knapsack, Complete Knapsack
进程在用户态和内核态的区别[独家解析]
二叉树[全解](C语言)
EL定时刷新页面中的皕杰报表实例
XMjs跨域问题解决
