Submission #1154449

#TimeUsernameProblemLanguageResultExecution timeMemory
1154449i271828Selotejp (COCI20_selotejp)C++20
110 / 110
40 ms40516 KiB
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
using namespace std;

int N=2;
int M=3;
bool A[1005][10]={{1,0,1},{1,1,1}};
int dp[10005][1030];
// 1 3 ###
int main(){
	cin>>N>>M;
	for (int i=0;i<N;i++){
		for (int j=0;j<M;j++){
			char c;
			cin>>c;
			if (c=='#') A[i][j]=1;
			else A[i][j]=0;
		}
	}
	
	for (int x=0;x<(1<<M);x++){
		dp[0][x]=A[0][0] ? 1 : 0;
	}
	
	int i=0,j=0;
	for (int p=1;p<(N*M);p++){
		j++;
		if (j==M) j=0,i++;
		for (int x=0;x<(1<<M);x++){
			int nx0=x>>1;
			int nx1=(x>>1)|(1<<(M-1));
			
			if (!A[i][j]){
				dp[p][x]=min(dp[p-1][nx0], dp[p-1][nx1]);
				continue;
			}else{
				dp[p][x]=min(dp[p-1][nx0], dp[p-1][nx1]) + 1;
				
				if (j>0 && A[i][j-1] && (x&3)==0){
					//cout<<'-'<<' ';
					int v=min(dp[p-1][nx0],dp[p-1][nx1]);
					dp[p][x]=min(dp[p][x], v);
				}
				if (i>0 && A[i-1][j] && x&1){
					//cout<<'|'<<' ';
					int v=dp[p-1][nx1];
					dp[p][x]=min(dp[p][x], v);
				}
			}
			//cout<<i<<' '<<j<<' '<<x<<' '<<dp[p][x]<<'\n';
		}
	}
	int ans=1<<30;
	for (int x=0;x<(1<<M);x++){
		ans=min(ans,dp[N*M-1][x]);
	}
	cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...