Submission #1335232

#TimeUsernameProblemLanguageResultExecution timeMemory
1335232Faisal_SaqibSelotejp (COCI20_selotejp)C++20
0 / 110
1 ms344 KiB
#include <iostream>
using namespace std;
char g[1005][15];
int pw[1005];
int ndp[1<<11],dp[1<<11],pre[1<<11];
int n,m;
int getmin(int ml)
{
  return pre[ml];
}
int main()
{
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  for(int i=0;i<(1<<10);i++)
  {
    pre[i]=__builtin_popcount(i);
  }
  for(int m1=0;m1<(1<<10);m1++)
  {
    for(int i=0;i<10;i++)
    {
      if((m1>>i)&1)pre[m1]=min(pre[m1],pre[m1^(1<<i)]+1); // remove column
      for(int j=i;j<10;j++)
      {
        if((m1>>j)&1)
        {
          pre[m1]=min(pre[m1],pre[m1-(1<<(j+1))+(1<<i)]+1);          
        }
        else
        {
          break;
        }
      }
    }
  }

  cin>>n>>m;
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<m;j++)
    {
      cin>>g[i][j];
      if(g[i][j]=='#')pw[i]+=(1<<j),g[i][j]='1';
      else g[i][j]='0';
    }
  }
  for(int i=0;i<(1<<m);i++)ndp[i]=dp[i]=m*n;
  dp[0]=0;
  for(int i=0;i<n;i++)
  {
    for(int m1=(1<<m)-1;m1>=0;m1--)
    {
      int c=__builtin_popcount(m1^(m1&pw[i])); // # bits on only in m1
      ndp[pw[i]]=min(ndp[pw[i]],c+dp[m1]);
      ndp[pw[i]&m1]=min(ndp[pw[i]&m1],dp[m1]+c+pre[pw[i]^(m1&pw[i])]);
      ndp[0]=min(ndp[0],dp[m1]+c+pre[pw[i]^(m1&pw[i])]+__builtin_popcount(m1&pw[i]));
    }
    for(int m1=(1<<m)-1;m1>=0;m1--)
    {
      dp[m1]=ndp[m1];
      ndp[m1]=n*m;
    }
  }
  cout<<dp[0]<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...