码迷,mamicode.com
首页 > 其他好文 > 详细

HDU5586 最大连续和 xingxing在努力

时间:2015-11-29 00:39:36      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

  这道题的意思是给你一串数字, 每一个数字可以通过一个公式转换成其他的数, 你可以转换一个连续区间的数, 让这一串数字的和最大。。只需要做一个小小的转换就可以转化问题为最大连续和。   具体见代码, 不过需要注意最大连续和的递推式是d[i] = max(c[i], d[i-1]+c[i])不要弄错了。。代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int inf = 0x3f3f3f3f;
int A[100000 + 100];
int F[100000 + 100];
int C[100000 + 100];

int d[100000 + 100];
int main()
{
    int n;
    while(scanf("%d", &n) == 1)
    {
        int sum = 0;
        for(int i=0; i<n; i++)
        {
            scanf("%d", &A[i]);
            F[i] = (1890*A[i]+143)%10007;
            C[i] = F[i] - A[i];               //求出转化后的数字和原序列差,然后求解最长连续子序列即可
            sum += A[i];
        }
        for(int i=0; i<n; i++)
            d[i] = -inf;
        d[0] = C[0];
        int max1 = d[0];
        for(int i=1; i<n; i++)
        {
            d[i] = max(C[i], d[i-1]+C[i]);
            max1 = max(max1, d[i]); 
        }
        if(max1 >= 0)                      //这里注意max1<0的情况
            printf("%d\n", sum+max1);
        else 
            printf("%d\n", sum);
    }
    return 0;
}

 

HDU5586 最大连续和 xingxing在努力

标签:

原文地址:http://www.cnblogs.com/xingxing1024/p/5003721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!