HELP!
查看原帖
HELP!
1281623
Problem1613end楼主2024/7/15 22:13

未过样例。。。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[10][10],n,dp[10][10][10][10][20],book[10][10][10][10][20];
ll dfs(ll s1,ll s2,ll e1,ll e2,ll cs){
	if(abs(s2-s1)==0 && abs(e2-e1)==0 && cs>=1)  return -1;
	if(book[s1][s2][e1][e2][cs]==1)  return  dp[s1][s2][e1][e2][cs];
	if(cs==0){
		ll pos=0;
		for(int i=s1;i<=s2;i++){
			for(int j=e1;j<=e2;j++){
				pos+=a[i][j];
			}
		}
		book[s1][s2][e1][e2][cs]=1;
		dp[s1][s2][e1][e2][cs]=pos*pos;
		cout<<s1<<" "<<s2<<" "<<e1<<" "<<e2<<endl;
		cout<<pos*pos<<endl;
		return pos*pos;
	}
	ll minn=10000000000000;
	for(int i=s1+1;i<=s2;i++){
		if(dfs(s1,i-1,e1,e2,cs-1)!=-1 && dfs(i,s2,e1,e2,0)!=-1)minn=min(minn,dfs(s1,i-1,e1,e2,cs-1)+dfs(i,s2,e1,e2,0));
		if(dfs(s1,i-1,e1,e2,0)!=-1 && dfs(i,s2,e1,e2,cs-1)!=-1)minn=min(minn,dfs(s1,i-1,e1,e2,0)+dfs(i,s2,e1,e2,cs-1));
	}
	for(int i=e1+1;i<=e2;i++){
		if(dfs(s1,s2,e1,i-1,cs-1)!=-1 && dfs(s1,s2,i,e2,0)!=-1)minn=min(minn,dfs(s1,s2,e1,i-1,cs-1)+dfs(s1,s2,i,e2,0));
		if(dfs(s1,s2,e1,i-1,0)!=-1 && dfs(s1,s2,i,e2,cs-1)!=-1)minn=min(minn,dfs(s1,s2,e1,i-1,0)+dfs(s1,s2,i,e2,cs-1));
	}
	if(minn!=10000000000000){
		book[s1][s2][e1][e2][cs]=1;
		dp[s1][s2][e1][e2][cs]=minn;
		cout<<s1<<" "<<s2<<" "<<e1<<" "<<e2<<endl;
		cout<<minn<<endl<<1<<endl;
		return minn;
	}
	else{
		book[s1][s2][e1][e2][cs]=1;
		dp[s1][s2][e1][e2][cs]=-1;
		return -1;
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=8;i++){
		for(int j=1;j<=8;j++){
			cin>>a[i][j];
		}
	}
	cout<<dfs(1,8,1,8,n);
	return 0;
}
2024/7/15 22:13
加载中...