using
System;
using
System.Collections.Generic;
class
Program
{
static
Dictionary<Tuple<
int
,
int
,
int
>,
int
> dp =
new
Dictionary<Tuple<
int
,
int
,
int
>,
int
>();
static
int
min_total_square_sum(
int
[] arrA,
int
[] arrB,
int
i,
int
Sa,
int
Sb,
int
n)
{
if
(i >= n)
{
int
temp = Sa * Sa + Sb * Sb;
return
temp;
}
Tuple<
int
,
int
,
int
> v = Tuple.Create(i, Sa, Sb);
if
(dp.ContainsKey(v))
{
return
dp[v];
}
int
t1 = min_total_square_sum(arrA, arrB, i + 1, Sa + arrA[i], Sb + arrB[i], n);
int
t2 = min_total_square_sum(arrA, arrB, i + 1, Sa + arrB[i], Sb + arrA[i], n);
return
dp[v] = Math.Min(t1, t2);
}
static
void
Main(
string
[] args)
{
int
N = 4;
int
[] arrA = { 6, 7, 2, 4 };
int
[] arrB = { 2, 5, 3, 5 };
int
Sa = 0, Sb = 0;
Console.WriteLine(min_total_square_sum(arrA, arrB, 0, Sa, Sb, N));
}
}