Submission #373307

#TimeUsernameProblemLanguageResultExecution timeMemory
373307sam571128Selotejp (COCI20_selotejp)C++14
110 / 110
80 ms80620 KiB
#include <bits/stdc++.h>

#define int long long
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

using namespace std;

const int N = 1e3+5, M = 10;
int grid[N][M];
int dp[N][M][1<<M];

signed main(){
	fastio
	int n,m;
	cin >> n >> m;
	for(int i = 1;i <= n;i++){
		for(int j = 0;j < m;j++){
			char c;
			cin >> c;
			if(c=='#') grid[i][j] = 1;
		}
	}
	for(int mask = 1;mask < (1<<m);mask++) dp[0][m-1][mask] = 1e18;
	for(int i = 1;i <= n;i++){
		for(int mask = 0; mask < (1<<m);mask++){
			if(grid[i][0]){
				if(mask&1) dp[i][0][mask] = min(dp[i-1][m-1][mask],dp[i-1][m-1][mask^1]+1);
				else dp[i][0][mask] = min(dp[i-1][m-1][mask],dp[i-1][m-1][mask^1])+1;
			}else{
				if(mask&1) dp[i][0][mask] = 1e18;
				else dp[i][0][mask] = min(dp[i-1][m-1][mask],dp[i-1][m-1][mask^1]);
			}
		}
		for(int j = 1;j < m;j++){
			for(int mask = 0; mask < (1<<m); mask++){
				if(grid[i][j]){
					if(mask&(1<<j)){
						dp[i][j][mask] = min(dp[i][j-1][mask],dp[i][j-1][mask^(1<<j)]+1);
					}else{
						if(grid[i][j-1]&&(mask&(1<<j-1))==0) dp[i][j][mask] = min(dp[i][j-1][mask],dp[i][j-1][mask^(1<<j)]);
						else dp[i][j][mask] = min(dp[i][j-1][mask],dp[i][j-1][mask^(1<<j)])+1;
					}
				}else{
					if(mask&(1<<j)) dp[i][j][mask] = 1e18;
					else dp[i][j][mask] = min(dp[i][j-1][mask],dp[i][j-1][mask^(1<<j)]);
				}
			}
		}
	}
	int ans = 1e18;
	for(int mask = 0; mask < (1<<m); mask++){
		ans = min(dp[n][m-1][mask],ans);
	}
	cout << ans << "\n";
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:40:35: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   40 |       if(grid[i][j-1]&&(mask&(1<<j-1))==0) dp[i][j][mask] = min(dp[i][j-1][mask],dp[i][j-1][mask^(1<<j)]);
      |                                  ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...