UVA 11553 - Grid Game

来源:互联网 发布:久石让 知乎 编辑:程序博客网 时间:2024/05/01 16:33

预先求出出使得Alice获利最小的Bob列序列,然后对于Alice选择的每一行,对应Bob选择的那一列

#include <iostream>#include <memory.h>#include <cstdio>#include <limits.h>#include <algorithm>using namespace std;#define MAX 10int grid[MAX][MAX],n;int main(){int t;scanf("%d",&t);while (t--){int ans=-INT_MAX;scanf("%d",&n);int rowSeq[MAX],temp[MAX],colSeq[MAX];for (int i=0;i<n;++i)rowSeq[i]=i,temp[i]=i;for (int i=0;i<n;++i)for (int j=0;j<n;++j)scanf("%d",&grid[i][j]);int minSum=INT_MAX;do {int sum=0;for (int i=0;i<n;++i){sum+=grid[i][temp[i]];}if(sum<minSum){//找出能使Alice获得最小candy的列排列minSum=sum;memcpy(colSeq,temp,sizeof(temp));}} while (next_permutation(temp,temp+n));do {int sum=0;for (int i=0;i<n;++i){sum+=grid[rowSeq[i]][colSeq[rowSeq[i]]];//对于Alice选择的每一种行排列,Bob选择能使Alice获利最小的那一列}if(sum>ans)ans=sum;} while (next_permutation(rowSeq,rowSeq+n));printf("%d\n",ans);}return 0;}


原创粉丝点击