草稿涂满荒唐画,摸鱼容易上课难 • 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;
}
评论:
请先登录,才能进行评论