如何在动态规划中应用凸包优化?

时间:2016-12-24 11:06:49

标签: optimization dynamic-programming convex-hull

我正在尝试使用动态编程解决代码强制上的this问题。我已经使复发具有O(N ^ 2)的复杂度,但它是超时的。我知道这个解决方案的复杂性可以通过凸面船体优化减少到O(N),这可以解释为here。但我无法降低复杂性。请帮忙。

这是我的代码。

#include <bits/stdc++.h>
using namespace std;
#define MAX 100005
typedef long long ll;
ll a[MAX],b[MAX],dp[MAX];
int main()
{
    int n;
    cin >> n;
    for(int i = 0; i < n; i++)
        cin >> a[i];
    for(int i = 0; i < n; i++)
        cin >> b[i];
    dp[0] = 0;

    for(int i = 1; i < n; i++)
    {
        dp[i] = 1e18;
        for(int j = 0; j < i; j++)
        {

            dp[i] = min(dp[i],dp[j] + a[i] * b[j]);
        }
    }

    cout << dp[n-1];
}

0 个答案:

没有答案