zoukankan      html  css  js  c++  java
  • HDU-1024

    链接:https://vjudge.net/problem/HDU-1024

    题意:

    给m 和n个数,将n个数分为m段,不交叉,求m段和的最大值。

    思路:

    刚开始一直看不懂怎么分,最后发现有的可以不选。

    dp加优化。

    Max数组记录上一段,对应几个数的最大值。

    代码:

    #include <iostream>
    #include <memory.h>
    #include <string>
    #include <istream>
    #include <sstream>
    #include <vector>
    #include <stack>
    #include <algorithm>
    #include <map>
    #include <queue>
    #include <math.h>
    #include <cstdio>
    using namespace std;
    
    typedef long long LL;
    
    const int MAXN = 1e6 + 10;
    const int INF = 0x7fffffff;
    
    int a[MAXN];
    int dp[MAXN];
    int Max[MAXN];
    
    int main()
    {
        int n, m, mmax;
    
    
        while (~scanf("%d%d", &m, &n))
        {
            for (int i = 1;i <= n;i++)
                scanf("%d", &a[i]);
    
            memset(dp,0, sizeof(dp));
            memset(Max,0, sizeof(Max));
    
            for (int i = 1;i <= m;i++)
            {
                mmax = -INF;
                for (int j = i;j <= n;j++)
                {
                    dp[j] = max(dp[j - 1], Max[j - 1]) + a[j];
                    Max[j - 1] = mmax;
                    mmax = max(mmax, dp[j]);
                }
            }
            printf("%d
    ", mmax);
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    实现类似add(1)(2)(3)的函数
    Chrome安装助手踩坑
    升级webpack4错误处理
    vue项目埋点
    如何理解vue中的v-bind?
    不能不知道的webpack基本配置
    IE9及以下浏览器升级提示
    HTML5常用API
    css中clip属性
    Web开发展望
  • 原文地址:https://www.cnblogs.com/YDDDD/p/10353788.html
Copyright © 2011-2022 走看看