c_cpp HOJ蛋问题#341

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp HOJ蛋问题#341相关的知识,希望对你有一定的参考价值。

#include<iostream>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
 
int dp[1010][1010];
int pow2[12] = {1};
 
using namespace std;
 
int f(int k, int n) {
    if (k == 0) return 0;
    if (n == 1) return k;
    if (dp[k][n] > 0) return dp[k][n];
     
    for (int i = 0; i < 12; i++)
        if (k < pow2[i] && n > i)
            return dp[k][n] = i;
 
    int ans = k + 1;
    for (int i = 1; i <= k; i++) {
        ans = min(ans, max(f(i-1, n-1), f(k-i, n)) + 1);
    }
    return dp[k][n] = ans;
}
 
int main() {
    for (int i = 1; i < 12; i++)
        pow2[i] = pow2[i-1] << 1;
 
    int t, n, k;
    cin >> t;
    while (t--) {
        cin >> n >> k;
        cout << f(k, n) << endl;
    }
}

以上是关于c_cpp HOJ蛋问题#341的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp HOJ 52瀚瀚数列@ 2013-02-18 20:14:18

hoj 2662 经典状压dp // MyFirst 状压dp

hoj Counting the algorithms

HOJ——T 1867 经理的烦恼

hoj 13792 Model Railroad

HOJ 1006