您的位置:首页 > 其它

最大连续子段和dp

2017-03-18 18:26 330 查看
There is a number sequence A1,A2….An,you can select a interval l,rl,r or not,all the numbers Ai(l≤i≤r) will become f(Ai).f(x)=(1890x+143)mod10007.After that,the sum of n numbers should be as much as possible.What is the maximum sum?

Input

There are multiple test cases.

First line of each case contains a single integer n.(1≤n≤105)

Next line contains n integers A1,A2….An.(0≤Ai≤104)

It’s guaranteed that ∑n≤106.

Output

For each test case,output the answer in a line.

Sample Input

2

10000 9999

5

1 9999 1 9999 1

Sample Output

19999

22033

#include<cstdio>
int a[100005];
int main(){
int n;
while (~scanf("%d",&n)){
int sum = 0;
for (int i= 0; i < n; ++i){
scanf("%d",&a[i]);
sum += a[i];
}
int ans = 0;
int tmp = 0;
int mx = 0;
for (int i = 0; i < n; ++i){
ans += (1890*a[i]+143)%10007;
tmp += a[i];
if (ans-tmp>mx) mx = ans - tmp;
if (ans - tmp < 0) {
ans = 0;
tmp = 0;
}
}
printf("%d\n",sum+mx);
}
return 0;
}


最大连续子段和 以前做过同类型的题。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: