wa这个题
本质上十分暴力
就是枚举再贪心
但是想不到的话就
GG
首先我们可以看出
本质上
只有+0,1,2 三种情况
因为加其他的数
都相当于3x+0,1,2
与0,1,2相比操作数更多但结果相同
3n搜索每行的情况
搜完行以后
对每一列进行贪心
看看哪种情况能得到最多的稳数
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<climits>
#include<queue>
#include<ctime>
#define LL long long
using namespace std;
int n,m,ma[12][12],ans[12],rans,cnt;
void dfs(int x)
{
int i,j,k;
if(x==n+1)
{
int tmp=0,p;
memset(ans,0,sizeof(ans));
for(i=1;i<=m;i++)
for(k=0;k<=2;k++)
{
cnt=0;
for(j=1;j<=n;j++)
{
p=(ma[j][i]+k)%3;
if((!p)&&(ma[j][i]+k<=12)) cnt++;
}
ans[i]=max(ans[i],cnt);
}
for(i=1;i<=m;i++) tmp+=ans[i];
rans=max(rans,tmp);
return;
}
for(j=0;j<=2;j++)
{
for(k=1;k<=m;k++) ma[x][k]+=j;
dfs(x+1);
for(k=1;k<=m;k++) ma[x][k]-=j;
}
}
int main()
{
freopen("haji.in","r",stdin);
freopen("haji.out","w",stdout);
int i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&ma[i][j]);
dfs(1);
printf("%d",rans);
return 0;
}