题解:CF225C Barcode
longyitongxue · · 题解
绿题做得最明白的一集。
这种问题我们可以分情况讨论,我们定义
接下来考虑转移。我们需要枚举当前位置往后
其中
::::success[Code]
#include<bits/stdc++.h>
using namespace std;
int dp[2][1005];
char c[1005][1005];
int bai[1005],hei[1005];
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
int n,m,x,y;
cin>>n>>m>>x>>y;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>c[i][j];
bai[j]+=c[i][j]=='.';
hei[j]+=c[i][j]=='#';
}
}
for(int i=1;i<=m;i++){
bai[i]+=bai[i-1];
hei[i]+=hei[i-1];
}
memset(dp,0x3f,sizeof dp);
dp[0][0]=0,dp[1][0]=0;
for(int i=0;i<m;i++){
for(int j=x;j<=y&&i+j<=m;j++){
dp[0][i+j]=min(dp[0][i+j],dp[1][i]+bai[i+j]-bai[i]);
dp[1][i+j]=min(dp[1][i+j],dp[0][i]+hei[i+j]-hei[i]);
}
}
cout<<min(dp[0][m],dp[1][m]);
return 0;
}
::::