제출 #1358660

#제출 시각아이디문제언어결과실행 시간메모리
1358660jump과수원 (NOI14_orchard)C++20
25 / 25
103 ms12212 KiB
#include <bits/stdc++.h>
#define int long long
int arr[1000010];
int arr2[100010];
int grid[155][5010];
int pref[155][5010];
signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  int n,m;
  std::cin >> n >> m;
  int cost = 0;
  int maxS = 0;
  int best = 0;
  if(n==1){
    for(int i=1;i<=m;i++){
      std::cin >> arr[i];
      if(arr[i]==0)arr[i]=-1;
      else cost+=1,arr[i]=1;
    }
    for(int i=1;i<=m;i++){
      maxS+=arr[i];
      best=std::max(maxS,best);
      if(maxS<0)maxS=0;
    }
    std::cout << cost - best;
    return 0;
  }
  else if(n==2){
    for(int i=1;i<=m;i++){
      std::cin >> arr[i];
      if(arr[i]==0)arr[i]=-1;
      else cost+=1,arr[i]=1;
    }
    for(int i=1;i<=m;i++){
      std::cin >> arr2[i];
      if(arr2[i]==0)arr2[i]=-1;
      else cost+=1,arr2[i]=1;
    }
    for(int i=1;i<=m;i++){
      maxS+=arr[i];
      best=std::max(maxS,best);
      if(maxS<0)maxS=0;
    }
    maxS=0;
    for(int i=1;i<=m;i++){
      maxS+=arr2[i];
      best=std::max(maxS,best);
      if(maxS<0)maxS=0;
    }
    maxS=0;
    for(int i=1;i<=m;i++){
      maxS+=arr[i]+arr2[i];
      best=std::max(maxS,best);
      if(maxS<0)maxS=0;
    }
    std::cout << cost - best;
    return 0;
  }
  for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
      std::cin >> grid[i][j];
      if(grid[i][j]==0)grid[i][j]=-1;
      else cost+=1,grid[i][j]=1;
      pref[i][j]=grid[i][j]+pref[i-1][j];
    }
  }
  for(int d=1;d<=n;d++){
    for(int u=1;u<=d;u++){
      maxS=0;
      for(int i=1;i<=m;i++){
        maxS+=pref[d][i]-pref[u-1][i];
        best=std::max(maxS,best);
        if(maxS<0)maxS=0;
      }
    }
  }
  std::cout << cost - best;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...