给定具有n个元素的基于(1的)阵列a和函数f(i,j)(1≤i,j≤n)为(i-j)2 + g(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