多重数列

成绩 0 开启时间 2013年02月21日 星期四 18:02
折扣 0.8 折扣时间 2013年02月28日 星期四 18:02
允许迟交 关闭时间 2013年02月28日 星期四 18:02
输入文件 linesum.in 输出文件 linesum.out

给出n个长度为m的数字序列S1,S2..Sn,找出一个子序列S',使得S'的各项和最大,
且S'中的相邻两个元素在原串中的位置差必须是2^k+1(k>0),
比如说,选取了第1个元素,下一个只能选取第4个,第6个,第10个…(距离相差2^1+1,2^2+1,2^3+1…)

如果选取了原串中第k个元素,则可以从S1[k],S2[k],S3[k]...Sn[k]中任选一个加入S'

输入格式:
第一行有两个整数n,m
第2到n+1行,每行有一个长度为m的数字序列

输出格式:
一行,最大的子序列和值

样例输入:
2 10
1 0 -1 3 2 1 -4 10 1 3
2 3 -2 -7 3 4 1 2 4 9

样例输出
16
(第2个序列的第2个,第5个和第一个序列的第8个)


数据规模:
对于30%的数据,m<=10000
对于100%的数据 m<=1000000,n<=5,答案不超过longint/int范围