地址:https://vjudge.net/contest/331385#problem/G
提交地址:https://nanti.jisuanke.com/t/A1538
思路:DFS
Code:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
int n,T;
int a[5][5];
int DFS(int k,int p);
int main()
{
ios::sync_with_stdio(false);
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=4;++i)
for(int j=1;j<=4;++j)
cin>>a[i][j];
cout<<DFS(n,0)<<endl;
}
return 0;
}
int DFS(int k,int p){
int res=0,mx=0,t;
if(p) res=mx=1e7;
if(k==1&&p){
for(int i=1;i<4;++i)
for(int j=1;j<4;++j)
mx=min(mx,a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1]);
return mx;
}
for(int i=1;i<4;++i)
for(int j=1;j<4;++j)
{
mx=a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1];
t=a[i][j]; a[i][j]=a[i][j+1]; a[i][j+1]=a[i+1][j+1]; a[i+1][j+1]=a[i+1][j]; a[i+1][j]=t;
if(!p){
res=max(res,mx+DFS(k,1));
}else{
res=min(res,mx+DFS(k-1,0));
}
t=a[i][j]; a[i][j]=a[i+1][j]; a[i+1][j]=a[i+1][j+1]; a[i+1][j+1]=a[i][j+1]; a[i][j+1]=t;
}
return res;
}