UVa115533 GRID GAME
問題
http://uva.onlinejudge.org/external/115/11553.html
解法
Bobが最善の手を取ってきた前提でAliceの得点を最大化する。
#include <iostream> #include <algorithm> #include <limits> using namespace std; int main() { int grid[8][8]; int Tc; cin >> Tc; while(Tc--) { int N; cin >> N; for(int i=0; i<N; i++) for(int j=0; j<N; j++) cin >> grid[i][j]; int per[N]; iota(per, per+N, 0); int alice = numeric_limits<int>::min(); int bob = numeric_limits<int>::min(); do { int num = 0; for(int i=0; i<N; i++) { num -= grid[i][per[i]]; } if(num > bob) { bob = num; alice = -num; } else if(num == bob) { if(alice < -num) alice = -num; } } while(next_permutation(per, per+N)); cout << alice << endl; } return 0; }