LampsGrid
枚举(思维难度大)
每次操作改变一整列的状态,所以如果初始时某两行状态相同,那么经过任意次操作后这两行的状态仍然相同;如果初始时某两行状态不相同,那么经过任意次操作后这两行的状态仍然不相同。枚举每一行,考虑能否把它通过K次操作变为全亮,如果能的话再数一数有多少行和这一行初始状态相同,它们也能通过同样的K次操作变为全亮。找出能变为全亮的且与之状态相同的行数最多的行即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <cmath> #include <ctime> #include <iostream> #include <sstream> #include <map> #include <algorithm> #include <string> #include <vector> using namespace std; class LampsGrid { public: int mostLit(vector <string> initial, int K) { int ans=0; for(int i=0;i<initial.size();++i) { int num=0; for(int j=0;j<initial[i].size();++j) num+=initial[i][j]=='0'; if(num>K||(K-num)%2) continue; num=0; for(int j=0;j<initial.size();++j) num+=initial[i]==initial[j]; ans=max(ans,num); } return ans; } }; |