zoukankan      html  css  js  c++  java
  • HDU 1024 Max Sum Plus Plus(基础dp)

    Max Sum Plus Plus

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 34541    Accepted Submission(s): 12341


    Problem Description
    Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem.

    Given a consecutive number sequence S1, S2, S3, S4 ... Sx, ... Sn (1 ≤ x ≤ n ≤ 1,000,000, -32768 ≤ Sx ≤ 32767). We define a function sum(i, j) = Si + ... + Sj (1 ≤ i ≤ j ≤ n).

    Now given an integer m (m > 0), your task is to find m pairs of i and j which make sum(i1, j1) + sum(i2, j2) + sum(i3, j3) + ... + sum(im, jm) maximal (ix ≤ iy ≤ jx or ix ≤ jy ≤ jx is not allowed).

    But I`m lazy, I don't want to write a special-judge module, so you don't have to output m pairs of i and j, just output the maximal summation of sum(ix, jx)(1 ≤ x ≤ m) instead. ^_^
     
    Input
    Each test case will begin with two integers m and n, followed by n integers S1, S2, S3 ... Sn.
    Process to the end of file.
     
    Output
    Output the maximal summation described above in one line.
     
    Sample Input
    1 3 1 2 3 2 6 -1 4 -2 3 -2 3
     
    Sample Output
    6 8
    Hint
    Huge input, scanf and dynamic programming is recommended.
     
    Author
    JGShining(极光炫影)
     
    Recommend
    We have carefully selected several similar problems for you:  1074 1025 1081 1080 1160 
     
     
    题意:给我们一个长度为N的数组让我们把数组分成M个不想交的字串 使得M个字串的和最大
    #include <iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define MAXN 1100000
    #define INF 0x3f3f3f3f
    int dp[MAXN];
    int maxn[MAXN];
    int a[MAXN];
    int main()
    {
        int n,m;
        std::ios::sync_with_stdio(false);
        while(cin>>m>>n){
            for(int i=1;i<=n;i++){
                    cin>>a[i];
                    maxn[i]=0;
                    dp[i]=0;
            }
            dp[0]=0;
            maxn[0]=0;
            int maxx;
            for(int i=1;i<=m;i++){
                     maxx=-INF;
                    for(int j=i;j<=n;j++){
                            dp[j]=max(dp[j-1]+a[j],maxn[j-1]+a[j]);
                            maxn[j-1]=maxx;
                            maxx=max(maxx,dp[j]);
                    }
            }
            cout<<maxx<<endl;
        }
        return 0;
    }
     
  • 相关阅读:
    PythonStudy——数据类型总结 Data type summary
    PythonStudy——可变与不可变 Variable and immutable
    PythonStudy——列表操作 List operatio
    PythonStudy——列表的常用操作 List of common operations
    PythonStudy——列表类型 List type
    PythonStudy——字符串扩展方法 String extension method
    PythonStudy——字符串重要方法 String important method
    AWT,Swing,RCP 开发
    JQuery插件机制
    最新知识网站
  • 原文地址:https://www.cnblogs.com/luowentao/p/8975477.html
Copyright © 2011-2022 走看看