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 <
}
댓글 0