大佬找错
查看原帖
大佬找错
1271334
maimai_slide_madman楼主2024/12/11 18:28

这题这么做为什么错了qvq

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=310;

template<typename T>void read(T&x){
	
	x=0;
	ll flag=1;
	char c;
	
	do{
		
		c=getchar();
		if(c=='-') flag=-1;
	}while(!isdigit(c));
	
	do{
		
		x=x*10+c-'0';
		c=getchar();
	}while(isdigit(c));
	
	x*=flag;
}

ll n,a[N][N];
int dp[N][N][N][2];

ll maxx(ll a,ll b,ll c,ll d){
	
	return max(max(max(a,b),c),d);
}

ll minx(ll a,ll b,ll c,ll d){
	
	return min(min(min(a,b),c),d);
}

int main(){
	
	read(n);
	for(int i=1;i<=n;i++){
		
		for(int j=1;j<=n;j++){
			
			read(a[i][j]);
			dp[i][j][1][0]=a[i][j];
			dp[i][j][1][1]=a[i][j];
		}
	}
	
	for(int k=2;k<=n;k++){
		
		for(int i=1;i<=n-k+1;i++){
			
			for(int j=1;j<=n-k+1;j++){
				
				ll zs=dp[i][j][k-1][0]+a[i+k-1][j+k-1];
				ll ys=dp[i][j+1][k-1][0]+a[i+k-1][j];
				ll zx=dp[i+1][j][k-1][0]+a[i][j+k-1];
				ll yx=dp[i+1][j+1][k-1][0]+a[i][j];
				
				ll zs2=dp[i][j][k-1][1]+a[i+k-1][j+k-1];
				ll ys2=dp[i][j+1][k-1][1]+a[i+k-1][j];
				ll zx2=dp[i+1][j][k-1][1]+a[i][j+k-1];
				ll yx2=dp[i+1][j+1][k-1][1]+a[i][j];
				
				dp[i][j][k][0]=maxx(zs,ys,zx,yx);
				dp[i][j][k][1]=minx(zs2,ys2,zx2,yx2);
			}
		}
	}
	
	printf("%d\n%d",dp[1][1][n][1],dp[1][1][n][0]);
	
	return 0;
}
2024/12/11 18:28
加载中...