您的位置:首页 > 其它

HDOJ:5586

2015-12-04 10:48 239 查看
[align=left]Problem Description[/align]
There is a number sequence A

1

,A

2

....A

n



,you can select a interval [l,r] or not,all the numbers A

i

(l≤i≤r)

will become f(A

i

)

.f(x)=(1890x+143)mod10007

.After that,the sum of n numbers should be as much as possible.What is the maximum sum?

[align=left]Input[/align]
There are multiple test cases.
First line of each
case contains a single integer n.(1≤n≤10

5

)


Next line contains n integers A

1

,A

2

....A

n




.(0≤A

i

≤10

4

)


It's guaranteed that ∑n≤10

6




.

[align=left]Output[/align]
For each test case,output the answer in a
line.

[align=left]Sample Input[/align]

2
10000 9999
5
1 9999 1 9999 1

[align=left]Sample Output[/align]

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: