AC

草稿涂满荒唐画,摸鱼容易上课难  •  2个月前


#include<bits/stdc++.h>
using namespace std;
int n;
int dp[55][55][55][55];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			char c;
			cin>>c;
			if(c=='#') dp[i][j][i][j]=1;
			else dp[i][j][i][j]=0;
		}
	}
	for(int w=1;w<=n;w++){
		for(int h=1;h<=n;h++) if(w!=1||h!=1){
			for(int x1=1;x1+w-1<=n;x1++){
				for(int y1=1;y1+h-1<=n;y1++){
					int x2=x1+w-1,y2=y1+h-1;
					dp[x1][y1][x2][y2]=max(w,h);
					for(int mid=x1;mid<x2;mid++){
						dp[x1][y1][x2][y2]=min(dp[x1][y1][x2][y2],dp[x1][y1][mid][y2]+dp[mid+1][y1][x2][y2]);
					}
					for(int mid=y1;mid<y2;mid++){
						dp[x1][y1][x2][y2]=min(dp[x1][y1][x2][y2],dp[x1][y1][x2][mid]+dp[x1][mid+1][x2][y2]);
					}
				}
			}
		}
	}
	cout<<dp[1][1][n][n]<<endl;
	return 0;
}


评论:

请先登录,才能进行评论