1884. 鸡蛋掉落-两枚鸡蛋
class Solution {
public:
int twoEggDrop(int n)
{
int i, j;
int f;
int dp[n + 1][3];
memset(dp, 0x3f3f3f, sizeof(dp));
for (i = 1; i <= n; i++) {
dp[i][1] = i;
}
dp[0][1] = dp[0][2] = 0;
//dp[i][j]表示,在第i层有J个鸡蛋,他是有前面的几层推导过来的.只不过这道题就两个,省去了中的循环,第i层是由前面的几层推导出来的。
for (i = 1; i <= n; i++) {
// for(int k=1;k<=2;k++)
int Min=INT32_MAX;
for (j = 1; j <=i; j++) {
// dp[i][1]=i;
Min = min(Min, max(dp[j-1][1], dp[i-j][2]) );
}
dp[i][2]=Min+1;
}
return dp[n][2];
}
};
887. 鸡蛋掉落
这个是二维数组,n和k太大会溢出。但是我不会优化。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回最差情况下扔棋子的最小次数
* @param n int整型 楼层数
* @param k int整型 棋子数
* @return int整型
*/
int solve(int n, int k) {
// write code here
if(n<1||k<1) return 0;
int dp[n+5][k+5];
memset(dp,0,sizeof(dp));
for(int i=0;i<=k;i++)
{
dp[0][i]=0;
}
for(int i=1;i<=n;i++)
{
dp[i][1]=i;
}
for(int i=1;i<=n;i++)
{
for(int j=2;j<=k;j++)
{
int Min=INT32_MAX;
for(int x=1;x<=i;x++)
{
Min=min(Min,max(dp[x-1][j-1],dp[i-x][j]));
}
dp[i][j]=Min+1;
}
}
for(int i=1;i<=n;i++)
{
for(int x=2;x<=k;x++)
{
int Min=INT32_MAX;
for(int j=1;j<=i;j++)
Min=min(Min,max(dp[j-1][x-1],dp[i-j][x]));
dp[i][x]=Min+1;
}
}
return dp[n][k];
}
};