gpt4 book ai didi

c++ - 蛋滴跟踪表

转载 作者:行者123 更新时间:2023-11-30 17:45:29 25 4
gpt4 key购买 nike

两个鸡蛋问题:

You are given 2 eggs.
You have access to a 100-storey building.
Eggs can be very hard or very fragile means it may break if dropped from the first floor or may not even break if dropped from 100 th floor.Both eggs are identical.
You need to figure out the highest floor of a 100-storey building an egg can be dropped without breaking.
Now the question is how many drops you need to make. You are allowed to break 2 eggs in the process.

我知道这个问题的动态规划解决方案。我想追踪解决方案以及最少的尝试次数。即我必须尝试以获得最少尝试次数的楼层。

# include <stdio.h>
# include <limits.h>


// A utility function to get maximum of two integers
int max(int a, int b) { return (a > b)? a: b; }


/* Function to get minimum number of trails needed in worst
case with n eggs and k floors */
int eggDrop(int n, int k)
{
/* A 2D table where entery eggFloor[i][j] will represent minimum
number of trials needed for i eggs and j floors. */
int eggFloor[n+1][k+1];
int res;
int i, j, x;

// We need one trial for one floor and0 trials for 0 floors
for (i = 1; i <= n; i++)
{
eggFloor[i][1] = 1;
eggFloor[i][0] = 0;
}

// We always need j trials for one egg and j floors.
for (j = 1; j <= k; j++)
eggFloor[1][j] = j;

// Fill rest of the entries in table using optimal substructure
// property
for (i = 2; i <= n; i++)
{
for (j = 2; j <= k; j++)
{
eggFloor[i][j] = INT_MAX;
for (x = 1; x <= j; x++)
{
res = 1 + max(eggFloor[i-1][x-1], eggFloor[i][j-x]);
if (res < eggFloor[i][j])
eggFloor[i][j] = res;
}
}
}

// eggFloor[n][k] holds the result
return eggFloor[n][k];
}

/* Driver program to test to pront printDups*/
int main()
{
int n = 2, k = 36;
printf ("\nMinimum number of trials in worst case with %d eggs and "
"%d floors is %d \n", n, k, eggDrop(n, k));
return 0;
}

最佳答案

您只需存储为您提供最佳解决方案的 x 值:

int eggDrop(int n, int k)
{
/* A 2D table where entery eggFloor[i][j] will represent minimum
number of trials needed for i eggs and j floors. */
int eggFloor[n+1][k+1];
int floor[n+1][k+1];
int res;
int i, j, x;

// We need one trial for one floor and0 trials for 0 floors
for (i = 1; i <= n; i++)
{
eggFloor[i][1] = 1;
eggFloor[i][0] = 0;
}

// We always need j trials for one egg and j floors.
for (j = 1; j <= k; j++)
eggFloor[1][j] = j;

// Fill rest of the entries in table using optimal substructure
// property
for (i = 2; i <= n; i++)
{
for (j = 2; j <= k; j++)
{
eggFloor[i][j] = INT_MAX;
for (x = 1; x <= j; x++)
{
res = 1 + max(eggFloor[i-1][x-1], eggFloor[i][j-x]);
if (res < eggFloor[i][j]) {
eggFloor[i][j] = res;
floor[i][j] = x;
}
}
}
}

// eggFloor[n][k] holds the result
return eggFloor[n][k];
}

最后,floor[i][j]包含了当你有i个鸡蛋和j个楼层时需要尝试的楼层.

关于c++ - 蛋滴跟踪表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19615162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com