Submission #377826

#TimeUsernameProblemLanguageResultExecution timeMemory
377826kshitij_sodaniSelotejp (COCI20_selotejp)C++14
110 / 110
565 ms12652 KiB
//#pragma GCC optimize("Ofast,unroll-loops") #include <bits/stdc++.h> using namespace std; typedef long long llo; #define mp make_pair #define pb push_back #define a first #define b second //define endl '\n' llo n,m; llo it[1001][11]; llo dp[1001][2001]; llo val[50][50][10];//first half is i has k bits set in (j^second half of number) int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>m; for(llo i=0;i<n;i++){ string s; cin>>s; for(llo j=0;j<m;j++){ if(s[j]=='#'){ it[i][j]=1; } else{ it[i][j]=0; } } } for(llo j=0;j<(1<<m);j++){ dp[0][j]=1e9; } dp[0][0]=0; for(llo i=1;i<=n;i++){ //cout<<i<<endl; for(llo j=0;j<32;j++){ for(llo k=0;k<32;k++){ for(llo p=0;p<=5;p++){ val[j][k][p]=1e9; } } } for(llo j=0;j<(1<<m);j++){ for(llo k=0;k<32;k++){ llo kk=__builtin_popcount(k&(((j-(j&31)))/32)); val[j&31][k][kk]=min(val[j&31][k][kk],dp[i-1][j]); } } for(llo j=0;j<(1<<m);j++){ dp[i][j]=1e9; llo stt=0; for(llo k=0;k<m;k++){ if(it[i-1][k]==0 and (j&(1<<k))){ stt=1; break; } } if(stt){ continue; } llo ba=-2; llo cot=0; for(llo k=0;k<m;k++){ if(it[i-1][k]==1){ if((1<<k)&j){ } else{ if(k>ba+1){ cot++; } ba=k; } } } /* for(llo k=0;k<(1<<m);k++){ dp[i][j]=min(dp[i][j],dp[i-1][k]+cot+__builtin_popcount(j)-__builtin_popcount(j&k)); }*/ for(llo k=0;k<32;k++){ for(llo kk=0;kk<=5;kk++){ llo co=__builtin_popcount(j)-kk-__builtin_popcount((j&31)&k); //if(val[k][(j-(j&31))/32][kk]+co+cot==2){ //cout<<i<<":"<<j<<":"<<k<<":"<<kk<<endl; //cout<<val[k][(j-(j&31))/32][kk]<<"//"<<co<<"//"<<cot<<endl; //} dp[i][j]=min(dp[i][j],val[k][(j-(j&31))/32][kk]+co+cot); } } } } //cout<<33<<endl; // cout<<n<<":"<<m<<endl; //return 0; llo ans=n*m; /*for(llo i=0;i<(1<<m);i++){ cout<<dp[1][i]<<":"; } cout<<endl;*/ for(llo i=0;i<(1<<m);i++){ //cout<<i<<":"<<dp[n][i]<<endl; // continue; ans=min(ans,dp[n][i]); /* if(dp[n][i]==2){ cout<<i<<":"<<endl; }*/ } cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...