hdu 5586 sum
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
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; }
世上无难事,只怕有心人!