제출 #1333805

#제출 시각아이디문제언어결과실행 시간메모리
1333805justin271828IMO (EGOI25_imo)C++20
0 / 100
1440 ms408 KiB
#include <bits/stdc++.h>
using namespace std;

#define ii pair<int, int>
#define f first
#define s second

int main() {
  int N, M, K;
  cin >> N >> M >> K;
  int a[N][M];
  ii rank[N];
  for (int i = 0; i < N; i++) {
    int sum = 0;
    for (int j = 0; j < M; j++) {
      cin >> a[i][j];
      sum += a[i][j];}
    rank[i] = {sum, i};
  }
  sort(rank, rank+N);
  int ans = 1234567890;
  for (int k = 0; k < 1<<(N*M); k++) {
    int mini[N];
    int maxi[N];
    int temp = 0;
    memset(mini, 0, sizeof(mini));
    memset(maxi, 0, sizeof(maxi));
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < M; j++) {
        if (k & (1<<(j+M*i))) {
          mini[i] += a[i][j];
          maxi[i] += a[i][j];
          temp += 1;
        }
        else maxi[i] += K;
    }}
    bool b = true;
    for (int i = 1; i < N; i++) {
      if (rank[i].s > rank[i-1].s) b = b && (mini[i] > maxi[i-1]);
      else b = b && (mini[i] >= maxi[i-1]);
    }
    if (b) ans = min(temp, ans);
  }
  cout << ans;
  return 0;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...