题目描述
一座大楼有0∼N层,地面算作第0层,最高的一层为第N层。已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能会摔碎,也可能不会摔碎(1⩽i⩽N)。给定整数N作为楼层数,再给定整数K作为棋子数,返回如果想找到棋子不会摔碎的最高层数,即使在最差的情况下扔的最小次数。一次只能扔一个棋子。
[要求]
时间复杂度在最坏情况下为O(n)
输入描述:
输入两个数N, K
输出描述:
输出一个数表示答案。
示例1
输入
10 1
显示我超时,未能完成提交
#include<iostream>
#include<vector>
using namespace std;
int dropChess(int N, int K){
vector<vector<int>> dp(K+1, vector<int>(N+1, 0));
int m=0;
while(dp[K][m]<N){
m++;
for(int k=1;k<=K;k++){
dp[k][m]=dp[k][m-1]+dp[k-1][m-1]+1;
}
}
return m;
}
int main(){
int n, k;
cin>>n>>k;
cout<<dropChess(n, k);
}