比赛 20191022轻松模拟测试 评测结果 AAAAAAAAAA
题目名称 Rotate Columns 最终得分 100
用户昵称 真香警告 运行时间 0.048 s
代码语言 C++ 内存使用 13.66 MiB
提交时间 2019-10-22 18:49:48
显示代码纯文本
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;

struct node{
	int mx, id;
	bool friend operator < (node a, node b){
		return a.mx > b.mx;
	}
}e[110];

int a[11][110], id[5], ans;
int n, m, N;

inline int read(){
	int x=0,w=1,ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') w=-1;
	for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
	return w*x;
}

void dfs(int pos){
	if(pos==N+1){
		int t=0;
		for(int i=1;i<=n;++i){
			int tmp=0;
			for(int j=1;j<=N;++j) tmp=max(tmp, a[i][id[j]]);
			t+=tmp;
		}
		ans=max(ans,t);
		return;
	}
	for(int i=1;i<=n;++i){
		int tmp[5]={0};
		for(int j=1;j<=n;++j) tmp[j]=a[j%n+1][id[pos]];
		for(int j=1;j<=n;++j) a[j][id[pos]]=tmp[j];
		dfs(pos+1);
	}
}

int main(){
	freopen("happygameT1.in","r",stdin);
	freopen("happygameT1.out","w",stdout);
	int T;
	T=read();
	while(T--){
		ans=0;
		memset(a,0,sizeof a);
		memset(id,0,sizeof id);
		memset(e,0,sizeof e);
		n=read();
		m=read();
		for(int i=1;i<=n;++i)
			for(int j=1;j<=m;++j){
				scanf("%d", &a[i][j]);
				e[j].id=j;
				e[j].mx=max(e[j].mx,a[i][j]); 
			}
		sort(e+1,e+1+m);
		N = min(n, m);
		for(int i=1;i<=N;++i) id[i]=e[i].id;
		dfs(1);
		printf("%d\n",ans);
	}
}