搜索题求调
查看原帖
搜索题求调
359096
有力乃炫楼主2022/7/25 20:49

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;
}
2022/7/25 20:49
加载中...