如何解决n中的http://www.spoj.com/problems/MST1/是10 ^ 9

时间:2014-03-17 21:06:03

标签: dynamic-programming heuristics

使用Bottom to up DP方法,我能够解决问题如何解决http://www.spoj.com/problems/MST1/达到10 ^ 8。

如果输入非常大,则高达10^9。我将无法为10^9创建查找表。那么解决问题的更好方法是什么?

是否有任何启发式解决方案?

1 个答案:

答案 0 :(得分:0)

#include <iostream>
#include <climits>
#include <algorithm>

using namespace std;

int main()
{
    const int N_MAX = 20000001;
    int *DP = new int[N_MAX];
    DP[1] = 0;

    for (int i = 2; i < N_MAX; i++) {
        int minimum =  DP[i - 1];
        if (i % 3 == 0) minimum = min(minimum, DP[i/3]);
        if (i % 2 == 0) minimum = min(minimum, DP[i/2]);

        DP[i] = minimum + 1;
    }

    int T, N; cin >> T;
    int c = 1;
    while (T--) {
        cin >> N;
        cout << "Case " << c++ << ": " << DP[N] << endl;
    }

    delete[] DP;
}