您的位置:首页 > 其它

BestCoder Round #64 (div.1) A.Sum

2015-11-28 20:26 288 查看


Sum

Time Limit: 2000/1000 MS (Java/Others)

Memory Limit: 65536/65536 K (Java/Others)

问题描述
给n个数{A}_{1},{A}_{2}....{A}_{n}A​1​​,A​2​​....A​n​​,你可以选择一个区间(也可以不选),区间里每个数x变成f(x),其中f(x)=(1890x+143) mod 10007f(x)=(1890x+143)mod10007。问最后n个数之和最大可能为多少。


输入描述
输入有多组数据。
每组数据第一行包含一个整数n.(1\leq n\leq {10}^{5})(1≤n≤10​5​​)
第二行n个整数{A}_{1},{A}_{2}....{A}_{n}A​1​​,A​2​​....A​n​​.(0\leq {A}_{i}\leq {10}^{4})(0≤A​i​​≤10​4​​)
数据保证 \sum n\leq {10}^{6}∑n≤10​6​​.


输出描述
对于每组数据输出一行答案.


输入样例
2
10000 9999
5
1 9999 1 9999 1


输出样例
19999
22033


暴力区间时间复杂度O(n^2),n<=10^5肯定会超时
方法一:

首先要先求出[i,j]区间x变为f(x)后的和sum1,以前的和sum,sum1-sum最大
可以先有一个数组把变化大小存着,再有dp求这个区间。

a[]数组表示就是已知数组,b[i]=f( a[i] )(0<i<=n)
如果最大的sum1-sum<0
答案的为a数组的前n项和
否者
a[1..l-1]和,b[l..r]和,a[l+1....n]和
三个和相加就是答案

方法二:
联机算法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: