我正在尝试使用动态编程解决代码强制上的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];
}