zoukankan      html  css  js  c++  java
  • hdu1024 Max Sum Plus Plus

    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

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define INF 0x3f3f3f3f
    #define ll long long
    
    using namespace std;
    
    const int maxn=1e6+10;
    
    ll dp[2][maxn];
    ll a[maxn];
    int m,n;
    
    int main()
    {
    	while(~scanf("%d%d",&m,&n))
    		{
    			ll ans=-1e15;//负数尽量取大一点
    			int t=1;
    			int i,j,k;
    			for(int i=1;i<=n;i++)
    				{
    					scanf("%lld",&a[i]);
    					dp[0][i]=dp[1][i]=0;
    				}
    			for(int i=1;i<=m;i++)
    				{
    					dp[t][i]=dp[1-t][i-1]+a[i];
    					ll Max=dp[1-t][i-1];
    					for(int j=i+1;j<=n+m-1;j++)
    						{
    							Max=max(Max,dp[1-t][j-1]);
    							dp[t][j]=max(dp[t][j-1],Max)+a[j];
    						}
    					t=1-t;
    				}
    			t=1-t;
    			for(int j=m;j<=n;j++)
    				if(ans<dp[t][j])
    				ans=dp[t][j];
    			printf("%lld
    ",ans);
    		}
    	return 0;
    }
  • 相关阅读:
    显示文件本地文件夹
    Select Dependencies选择依赖项
    搜索小技巧
    783. Minimum Distance Between BST Nodes BST节点之间的最小距离
    5. Longest Palindromic Substring 最长的回文子串
    12. Integer to Roman 整数转罗马数字
    3. Longest Substring Without Repeating Characters 最长的子串不重复字符
    539. Minimum Time Difference 最小时差
    43. Multiply Strings 字符串相乘
    445. Add Two Numbers II 两个数字相加2
  • 原文地址:https://www.cnblogs.com/BlueDoor1999/p/13301382.html
Copyright © 2011-2022 走看看