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 <string>
#include <algorithm>
using namespace std;
long long a[100005],b[100005],sum;
int main()
{
int n,m,i,j,k;
while(cin>>n)
{ sum=0;
for(i=1;i<=n;i++)
{cin>>a[i];
b[i]=(1890*a[i]+143)%10007-a[i];
sum+=a[i];
}
b[0]=0;
for(i=1;i<=n;i++)
b[i]=max(b[i],b[i-1]+b[i]);
sort(b,b+n+1);
cout<<sum+b[n]<<endl;
}
return 0;
}