classSolution{public:intmaxScore(vector<vector<int>>&grid);};intSolution::maxScore(vector<vector<int>>&mat){intn=mat.size();// present_in[ele] contains all rows that have an element equal to 'ele'.
map<int,set<int>>present_in;for(inti=0;i<n;i++){for(intj=0;j<mat[i].size();j++){present_in[mat[i][j]].insert(i);}}intfull_mask=(1<<n)-1;vector<int>dp(full_mask+1,0);for(auto&[val,rows]:present_in){vector<int>ndp=dp;for(intmask=0;mask<=full_mask;mask++){for(inti=0;i<n;i++){if((1<<i)&mask){continue;}if(!rows.count(i)){continue;}intnxt=mask|(1<<i);ndp[nxt]=max(ndp[nxt],dp[mask]+val);}}swap(dp,ndp);}return*max_element(dp.begin(),dp.end());}