您的位置:首页 > 其它

一个n数组求和问题

2013-09-13 14:56 204 查看
这是我再水木社区看到的题目,然后自己思考了下。

问题是这样的,现在有n个长度都为m的int数组, 每个数组可以有两种行为:原地不动,或者数组翻转。所谓数组翻转,就是a[i]=a[m-1-i],首尾颠倒。比如: [1,3,2,9]的翻转就是[9,2,3,1]。现我们将这n个翻转或者不翻转的数组的对应位置相加成一个新数组(sum[i]=a1[i]+a2[i]+...+an[i]),
现找到最优解让sum数组的方差最小。

1).用一个二维数组array
[m]表示n个长度为m大小的数组,初始化数据。
2).计算sum的平均值S_average = sum(array)/m,这求得sum[i]的平均值。
3).定义一维数组exchange
用于标记第i是否翻转,再定义一个result
表示最后翻转的结果。
4).定义count记录翻转的个数。
5).定义两个数组OldValue[m],newValue[m]存储sum[i]的值,即每一列的值
6).大概思路

计算只翻转第一行,即array[1][m];
得到OldValue=计算得到翻转count个后的值;

for(count=1;count<=n;++count)
{
select(exchange);(排列组合,选择exchange中的count个行进行翻转)

newValue=计算得到翻转count个后的值

if(方差(newValue)<方差(OldValue))
{
OldValue = newValue;

get(result);

}

}

最后你需要的值在OldValue中,翻转了哪些行记录在result中,不知道这行不行啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: