This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "wiring.h"
#define ff first
#define ss second
using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
const int maxn = 210;
const ll inf = 1e18+10;
int n, m;
pii a[maxn];
ll dp[2*maxn][maxn][maxn];
ll solve(int i, int r, int b)
{
if (r > n+m || b > n+m) return inf;
if (i == n+m+1)
{
if (!r && !b) return 0;
return inf;
}
if (dp[i][r][b] != -1) return dp[i][r][b];
ll ans = inf;
if (a[i].ss == 0)
{
ans = min(ans, solve(i+1, r+1, b) - 1ll*a[i].ff);
ans = min(ans, solve(i, r+1, b) - 1ll*a[i].ff);
if (b) ans = min(ans, 1ll*a[i].ff + solve(i+1, r, b-1));
if (b) ans = min(ans, 1ll*a[i].ff + solve(i, r, b-1));
}
else
{
ans = min(ans, solve(i+1, r, b+1) - 1ll*a[i].ff);
ans = min(ans, solve(i, r, b+1) - 1ll*a[i].ff);
if (r) ans = min(ans, 1ll*a[i].ff + solve(i+1, r-1, b));
if (r) ans = min(ans, 1ll*a[i].ff + solve(i, r-1, b));
}
return dp[i][r][b] = ans;
}
ll min_total_length(vector<int> r, vector<int> b)
{
n = r.size(), m = b.size();
if (n <= 200 && m <= 200)
{
int aux = 0;
for (auto i: r)
a[++aux] = {i, 0};
for (auto i: b)
a[++aux] = {i, 1};
sort(a+1, a+n+m+1);
memset(dp, -1, sizeof dp);
return solve(1, 0, 0);
}
ll ans = 0;
if (m > n)
{
for (int i = m-1; i >= n; i--)
ans += 1ll*(b[i]-r[n-1]);
for (int i = n-1; i >= 0; i--)
ans += 1ll*(b[i]-r[i]);
}
else if (m < n)
{
for (int i = 0; i < n-m; i++)
ans += 1ll*(b[0]-r[i]);
for (int i = n-m; i < n; i++)
ans += 1ll*(b[i-(n-m)]-r[i]);
}
else
{
for (int i = 0; i < n; i++)
ans += 1ll*(b[i]-r[i]);
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |