제출 #1361772

#제출 시각아이디문제언어결과실행 시간메모리
1361772yyc000123IMO (EGOI25_imo)C++20
0 / 100
229 ms432 KiB
#include<bits/stdc++.h>
using namespace std ;
#define g0 get<0>
#define g1 get<1>
#define g2 get<2>
const int N = 20 ; // 2e4+5 ;
const int M = 20 ; // 105 ;
const int K = 105 ;
int n , m , k , ans , arr[N][M] , mini[N] , maxi[N] ;
tuple<int,int,vector<int>> v[N] ;

void check(){
    int cnt = 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(!arr[i][j]) mini[i]+=g2(v[i])[j] , maxi[i]+=g2(v[i])[j] ;
            else mini[i]+=0 , maxi[i]+=k , cnt++ ;
        }
        if(i && (maxi[i-1]>mini[i] || (maxi[i-1]==mini[i] && -g1(v[i-1])<-g1(v[i])))) return ;
    }
    ans = max(ans,cnt) ;
}

void f(int x , int y){
    if(x==n){
        check() ;
        return ;
    }
    int a = x , b = y+1 ;
    if(b==m) a++ , b=0 ;
    arr[x][y]=1 ;
    f(a,b) ;
    arr[x][y]=0 ;
    f(a,b) ;
}

int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
    cin >> n >> m >> k ;
    for(int i=0 ; i<n ; i++){
        g1(v[i]) = -i ; g2(v[i]).resize(m) ;
        for(int j=0 ; j<m ; j++) cin >> g2(v[i])[j] , g0(v[i])+=g2(v[i])[j] ;
    }
    sort(v,v+n) ;
    f(0,0) ;
    cout << ans << '\n' ;
    return 0 ;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…