제출 #19160

#제출 시각아이디문제언어결과실행 시간메모리
19160Namnamseo일도양단! (kriii1_1)C++14
1 / 1
17 ms2364 KiB
#include <cstdio>

int x,y,z;

int nx[100];
int ny[100];
int nz[100];
int n;

int cube(int a,int b,int c,int d,int e,int f){
    int ret=0, i;
    for(i=0;i<n;++i){
        if(a<=nx[i] && nx[i]<=b &&
           c<=ny[i] && ny[i]<=d &&
           e<=nz[i] && nz[i]<=f) ++ret;
    }
    return ret;
}

int  dp[8][8][8][8][8][8];
bool dc[8][8][8][8][8][8];

template<typename T> inline T max(T a,T b){ return b<a?a:b; }
template<typename T> inline T min(T a,T b){ return a<b?a:b; }

int work(int a,int b,int c,int d,int e,int f){
    int myn = cube(a,b,c,d,e,f);
    if(myn==1) return (b-a+1)*(d-c+1)*(f-e+1);
    if(dc[a][b][c][d][e][f]) return dp[a][b][c][d][e][f];
    dc[a][b][c][d][e][f]=1;
    int& ret=dp[a][b][c][d][e][f];
    int i;
    for(i=a;i<b;++i) ret=max(ret, min( work(a,i,c,d,e,f), work(i+1,b,c,d,e,f) ));
    for(i=c;i<d;++i) ret=max(ret, min( work(a,b,c,i,e,f), work(a,b,i+1,d,e,f) ));
    for(i=e;i<f;++i) ret=max(ret, min( work(a,b,c,d,e,i), work(a,b,c,d,i+1,f) ));
    return ret;
}

int main()
{
    scanf("%d%d%d",&x,&y,&z);
    scanf("%d",&n);
    int i;
    for(i=0;i<n;++i) {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        nx[i]=a;
        ny[i]=b;
        nz[i]=c;
    }
    printf("%d\n",work(1,x,1,y,1,z));
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...