给定具有n个元素的基于(1的)阵列a和函数f(i,j)(1≤i,j≤n)为(i-j)2g(i,j)2 . 函数g由以下伪代码计算:

int g(int i, int j)
 { 
   int sum = 0;
   for (int k = min(i, j) + 1; k <= max(i, j); k = k + 1)
     sum = sum + a[k];
   return sum; 
}

找到一个值mini≠j f(i,j) .

我为此创建了一个迭代强力算法,但解决方案需要以分而治之的方式进行编码 .

蛮力算法:

def g_fun(i,j):
    sum=0
    for k in xrange(min(i,j)+1,max(i,j)+1):
        sum+=arr[k-1]
    return sum

def f_fun(i,j):
    s=g_fun(i,j)
    return ((i-j)**2 + s**2)

n=input("n : ")
arr=map(int,raw_input("Array : ").split())
low=100000 #infinity
for i in xrange(1,n+1):
    for j in xrange(1,n+1):
        if i!=j:
            temp=f_fun(i,j)
            if temp < low:
                low=temp
print low