Problem Description
There is a number sequence A1,A2....An ,you can select a interval [l,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<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n;
int a[100010],b,c[100010];
int i,sum,count;
while(scanf("%d",&n)!=EOF)//多组测试数据
{
sum=0;
for(i=0;i<n;i++)
{
cin>>a[i];
b=(1890*a[i]+143)%10007;
c[i]=b-a[i];//子序列
sum+=a[i];//原序列的和
}
for(i=1;i<n;i++)
{
c[i]=max(c[i],c[i-1]+c[i]);
}//动态规划求最大子序列的和
count=0;
for(i=0;i<n;i++)
{
if(count<=c[i])
count=c[i];
}
printf("%d\n",sum+count);
}
return 0;
}