trialCount[a][b]면 b층에서 a개 계란 떨어뜨릴 경우의 수 테이블


문제)

n층 빌딩에서 x개의 계란을 떨어뜨릴때 계란이 깨지기 시작하는 가장 낮은층을 알아내려면 계란을 몇번 떨어뜨려야 할까요?? (단 i층에서 떨어뜨린 달걀이 깨졌으면 i+1층에선 반드시 깨지며, i층에서 떨어뜨린 달걀이 깨지지 않았다면 i-1층에선 반드시 깨지지 않음)


sample

100층, 계란 2개 일때는 최솟값 14.


이거 인터넷에서 구한건 아니고 종이로 받은건데 왜 저 코드가 나오는지 모르겠어요.......

특히 저기 3중 for문이 어떤거하는건지 1 + max(trialCount[i-1][k-1], trialCount[i][j-k]);는 왜 저렇게 나온건지

왜 저렇게 해야만 하는건지 알려주실분



#include

#include

using namespace std;


// n: floors of building

// x: number of eggs

int eggDropTrial(int n, int x) {

int trialCount[x+1][n+1];


for(int i = 1; i <= x; i++) {

trialCount[i][0] = 0;

trialCount[i][1] = 1;

}

for(int j = 1; j <= n; j++) {

trialCount[1][j] = j;

}


for(int i = 2; i <= x; i++) {

for(int j = 2; j <= n; j++) {

trialCount[i][j] = 99999999;

for(int k = 1; k <= j; k++) {

int thisTrial = 1 + max(trialCount[i-1][k-1], trialCount[i][j-k]);


if(thisTrial

trialCount[i][j] = thisTrial;

}

}

}

return trialCount[x][n];

}


int main(void) {

cout <

}