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

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;
}


posted @ 2015-11-29 10:54  (慎独)  阅读(160)  评论(0编辑  收藏  举报