zoukankan      html  css  js  c++  java
  • HDU5586 最大连续和 xingxing在努力

      这道题的意思是给你一串数字, 每一个数字可以通过一个公式转换成其他的数, 你可以转换一个连续区间的数, 让这一串数字的和最大。。只需要做一个小小的转换就可以转化问题为最大连续和。   具体见代码, 不过需要注意最大连续和的递推式是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
    ", sum+max1);
            else 
                printf("%d
    ", sum);
        }
        return 0;
    }
  • 相关阅读:
    A good habit is half done
    mysql 练习题
    管理的实践
    mysql 表关联时执行顺序
    python 实现短信轰炸
    python django码云第三方登录
    mysql事务的隔离级别
    微服务
    什么是git
    如何使用Hexo创建博客
  • 原文地址:https://www.cnblogs.com/xingxing1024/p/5003721.html
Copyright © 2011-2022 走看看