HDOJ:5586

Problem Description
There is a number sequence A1,A2....An ,you can select a interval [l,r] or not,all the numbers Ai(lir) 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.(1n105)
Next line contains n integers A1,A2....An .(0Ai104)
It's guaranteed that n106 .
 

 

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

 
posted @ 2015-12-04 10:48  yi天  阅读(155)  评论(0)    收藏  举报