rt,搜索题求调,样例都过不去/kk
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef unsigned long long ull;
int n;
double a[15][15],sum[15][15];
double get(int a,int b,int c,int d){
return sum[c][d] - sum[a-1][d] - sum[d][b-1] + sum[a-1][b-1];
}
double dfs(int x,int a,int b,int c,int d){
if(x==n) return get(a,b,c,d)*get(a,b,c,d);
double ans = 1e18;
for(int i=a+1;i<=c;i++){
double ans1 = get(a,b,i-1,d),ans2 = dfs(x+1,i,b,c,d);
ans = min(ans,ans1*ans1+ans2);
double ans3 = get(i,b,c,d),ans4 = dfs(x+1,a,b,i-1,d);
ans = min(ans,ans3*ans3+ans4);
}
for(int i=b+1;i<=d;i++){
double ans1 = get(a,b,c,i-1),ans2 = dfs(x+1,a,i,c,d);
ans = min(ans,ans1*ans1+ans2);
double ans3 = get(a,i,c,d),ans4 = dfs(x+1,a,b,c,i-1);
ans = min(ans,ans3*ans3+ans4);
}
return ans;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=8;i++){
for(int j=1;j<=8;j++){
scanf("%lf",&a[i][j]);
sum[i][j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
}
}
printf("%.3lf\n",dfs(1,1,1,8,8)/n-get(1,1,8,8)/n*get(1,1,8,8)/n);
return 0;
}