1962: 模型王子
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 153 Solved: 94
[ Submit][ Status][ Discuss]
Description

Input
输入数据共一行,两个整数N,K,用一个空格隔开,具体意义如题目中所述。
Output
输出数据共一行,为最少所需要的时间S。
Sample Input
5 3
Sample Output
5
HINT
对于全部的数据,1 < = K < = 100,1 < = N < = 10^5
Source
经典猜数问题. 参考论文 --龙凡《一类猜数问题的研究》. 讲解非常清晰且非常经典, 请耐心看完.
#include<stdio.h>
#include<algorithm>
using namespace std;
int n, k;
int f[100005][105];
int main(){
scanf("%d%d", &n, &k);
for(int i = 2; ; ++i){
f[i][1] = i / 2;
for(int j = 2; j <= k; ++j)
f[i][j] = max(f[i - 2][j - 2] + f[i - 1][j], f[i - 1][j - 1] + f[i - 2][j]) + 1;
if(f[i][k] >= n) {printf("%d\n", i); break;}
}
}