目前最高96,求调到稳定98+
#include<bits/stdc++.h>
#define cen cout << endl
#define c1 cout << 1 << " "
#define cs cout << " ";
using namespace std;
double Rand1(double a,double b){static mt19937 t(random_device{}());uniform_real_distribution<double> f(a,b);return f(t);}
int Rand2(int a,int b){static mt19937 t(random_device{}());uniform_int_distribution<int> f(a,b);return f(t);}
bool use(int a,int b,double t){return (1.0*exp(a-b))/t<(Rand1(0.0,1.0));}
long long times=2025*114514;
const double time_second=3.5;
const double temp_end=1e-5;
const double temp_begin=1e3;
const double temp=0.9999955;
int n,m,c;
int map1[39][39],tmap[39][39];
int p[29];
int ff(){
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<m;j++){
if(tmap[i][j]!=tmap[i][j+1]){
ans++;
}
}
}
for(int i=1;i<=m;i++){
for(int j=1;j<n;j++){
if(tmap[j][i]!=tmap[j-1][i]){
ans++;
}
}
}
return ans;
}
void py(bool flag){//1:t=1,0:1=t
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
tmap[i][j]=(flag?map1[i][j]:tmap[i][j]);
map1[i][j]=(flag?map1[i][j]:tmap[i][j]);
}
}
}
int main(){
cin >> n >> m >> c;
for(int i=1;i<=c;i++){
cin >> p[i];
}
int k=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
while(!p[k]) k++;
map1[i][j]=tmap[i][j]=k;
p[k]--;
}
}
int ans=ff();
while((clock()/(1.0*CLOCKS_PER_SEC))<time_second&×--){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
tmap[i][j]=map1[i][j];
}
}
for(double i=temp_begin;i>=temp_end;i*=temp){
int x1=Rand2(1,n),x2=Rand2(1,n),y1=Rand2(1,m),y2=Rand2(1,m);
swap(tmap[x1][y1],tmap[x2][y2]);
int tans=ff();
if(tans<ans){
ans=tans;
py(0);
}
else if(!use(tans,ans,i)){
swap(tmap[x1][y1],tmap[x2][y2]);
}
else{
py(0);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout << map1[i][j];
cs;
}
cen;
}
return 0;
}
/*
5 7 6
12 5 7 5 3 3
*/