제출 #1346597

#제출 시각아이디문제언어결과실행 시간메모리
1346597ElayV13Nafta (COI15_nafta)C++20
11 / 100
1095 ms4732 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long 
const int INF=1e18;

int dx[]={1,-1,0,0},dy[]={0,0,1,-1};

int n,m;
char a[2001][2001];
bool used[2001][2001];
int cs[2001*2001];
int cc[2001][2001];
int ss[2001];
int co=0;
set<int>all[2001];

bool go(int x,int y){
      if(min(x,y)>=1&&x<=n&&y<=m&&a[x][y]!='.'&&!used[x][y]) return 1;
      return 0;
}

void dfs(int x,int y){
      cc[x][y]=co;
      cs[cc[x][y]]+=(a[x][y]-'0');
      used[x][y]=1;
      for(int i=0;i<4;i++){
            int X=x+dx[i];
            int Y=y+dy[i];
            if(go(X,Y)) dfs(X,Y);
      }
}

int dp[2001][2001];//dp[i][j]=i ye j.ni qoyuram

int cost(int i,int j){
      int s=ss[j];
      int same=0;
      for(int ccc:all[i]){
            if(all[j].count(ccc)>0) same+=cs[ccc];
      }
      return same;
}

void solve(){
      cin>>n>>m;
      for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j];
      for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                  if(!used[i][j]&&a[i][j]!='.') co++,dfs(i,j);
            }
      }
      for(int i=1;i<=m;i++){
            for(int j=1;j<=n;j++){
                  all[i].insert(cc[j][i]);
            }
            for(int ccc:all[i]) ss[i]+=cs[ccc];
      }
      for(int i=1;i<=m;i++) dp[1][i]=ss[i];
      for(int c=2;c<=m;c++){
            for(int i=c;i<=m;i++){
                  for(int j=1;j<=i;j++){
                        dp[c][i]=max(dp[c][i],dp[c-1][j]-cost(j,i)+ss[i]);
                  }
            }
      }
      for(int i=1;i<=m;i++){
            int res=0;
            for(int j=1;j<=m;j++) res=max(res,dp[i][j]);
            cout<<res<<endl;
      } 
}
signed main(){
      ios_base::sync_with_stdio(0);
      cin.tie(0);
      cout.tie(0);
      int T=1;//cin>>T;
      while(T--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...