SDUT_师创杯”山东理工大学第八届ACM程序设计竞赛部分题解

原创 2016年06月01日 19:06:45

数列求和2

Time Limit: 1000MS Memory limit: 65536K

分析:该题明显是一个dp,求一个长为n的数列中m个不相冲突的区间和的最大值

dp[i][j] 表示 以第i个数字结尾且被分割为j的区间(不一定最优);三重循环,最外层遍历i,中间遍历j,最内层是K的遍历前i-1的最优j的组合假设值为v, 则dp[i][j]=max(dp[i-1][j],v)+A[i];

然后在进行滚动数组优化,s

题目描述

给出一个数列 S 1, S 2, S 3, S 4 ... S x, ... S n (1 ≤ x ≤ n ≤ 1,000,000, -32768 ≤ S x ≤ 32767). 我们定义 sum(i, j) = S i +S i+1+ ... + S j (1 ≤ i ≤ j ≤ n).
现在给你一个整数 m (n>=m > 0), 你的任务是找出m对 i,j 使 sum(i 1, j 1) + sum(i 2, j 2) + sum(i 3, j 3) + ... + sum(i m, j m) 最大化 (i x ≤ i y ≤ j x 或 i x ≤ j y ≤ j x 是不允许的).
结果仅输出sum(i x, j x)的最大累加和(1 ≤ x ≤ m) 就行了.

输入

包含多组数据,每组数据占一行,前两个整数是m和n,后面紧跟着是n个整数S 1, S 2, S 3 ... S n.

输出

输出所描述的结果,每一组的结果占一行

示例输入

1 3 1 2 3 
2 6 -1 4 -2 3 -2 3

示例输出

6
8

提示

 

来源

 “师创杯”山东理工大学第八届ACM程序设计竞赛

示例程序

 

#include <cstdio>
#include <bits/stdc++.h>
using namespace std;
const int N=5010;
const int INF=0x3f3f3f3f;
int dp[N];
int cost[N];
int A[N];
int main()
{
    int n,m;
    while(~scanf("%d%d",&m,&n))
    {
        for(int i=1;i<=n;i++)
            scanf("%d",&A[i]);
        for(int i=0;i<=n;i++)
            for(int j=0;j<=m;j++)
            cost[j]=dp[j]=-INF;
        cost[0]=dp[0]=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=m;j>=1;j--)
            {
                dp[j]=max(cost[j-1],dp[j])+A[i];
                cost[j]=max(cost[j],dp[j]);
            }
        }
        printf("%d\n",cost[m]);
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

“浪潮杯”山东省第八届ACM大学生程序设计竞赛 J

company Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description Th...
  • C18854805113
  • C18854805113
  • 2017年05月13日 13:51
  • 385

“浪潮杯”山东省第八届ACM大学生程序设计竞赛F

quadratic equation Time Limit: 2000MS Memory Limit: 131072KB Submit Statistic Problem Descr...
  • C18854805113
  • C18854805113
  • 2017年05月13日 13:32
  • 559

"浪潮杯”山东省第八届ACM大学生程序设计竞赛 CF

01背包要用到贪心,这个贪心好像做过,又好像没做过,可能当时抄的百度吧。 就是这个01背包的价值是变化的,所以要先放最值得放的。开始怎么都想不通, 这样想如果都能做出来,而且每个都会是正分,先做那...
  • clx55555
  • clx55555
  • 2017年05月09日 18:45
  • 584

2017-山东省第八届ACM省赛

从第一次的懵懂,第二次的遗憾,到今年的首银,这已经是第三次省赛之旅了_(:з」∠)_,第一次打星星,第二次错失银牌,这次感觉像是补回了上次银牌的样子?     时间回溯到几天前,第一天热身赛,恩,,...
  • qq978874169
  • qq978874169
  • 2017年05月13日 22:43
  • 353

nyoj 1239 引水工程 (河南省第八届acm程序设计大赛)

题目1239题目信息运行结果本题排行讨论区 引水工程 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 南水北调工程是优化水资源配置、促进区域协调发展的基础性工程,是新...
  • su20145104009
  • su20145104009
  • 2016年02月17日 18:22
  • 2778

第八届acm山东省赛总结

比赛过程:首先看到的是F题,我一开始从后面往前看的,然后队友告诉我F比较简单,然后就去让队友去敲了,我去继续看了其他的题,首先过一遍题是为了找到水题。不幸的是F题WA了好多次,这时候另一个队友说G是一...
  • ACM_Fish
  • ACM_Fish
  • 2017年05月09日 21:02
  • 319

"科林明伦杯"哈尔滨理工大学第六届程序设计团队赛(12.10)

"科林明伦杯"哈尔滨理工大学第六届程序设计团队赛 水题已去除。。 B题  Time 原题链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=s...
  • blessLZH0108
  • blessLZH0108
  • 2016年12月11日 15:06
  • 2827

第八届ACM趣味程序设计竞赛第四场(正式赛)A B C

周日刚打算午觉躺下,舍友说今天有比赛,所以就..凑个热闹..
  • sinat_24568351
  • sinat_24568351
  • 2016年12月18日 18:30
  • 359

科林明伦杯”哈尔滨理工大学第七届程序设计团队赛G - Sorting

Description You have an integer sequence a1 … an (integers are distinct) and you need to sort it ...
  • dsaghjkye
  • dsaghjkye
  • 2017年12月20日 20:40
  • 31

fzu 2277 Change [第八届福建省大学生程序设计竞赛 Problem F] [线段树]

点击打开题目 题意: 给定一棵根为1, n个结点的树. 有q个操作,有两种不同的操作 (1) 1 v k x : a[v] += x, a[v '] += x – k(v '为v的...
  • hnust_xx
  • hnust_xx
  • 2017年07月23日 15:42
  • 556
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SDUT_师创杯”山东理工大学第八届ACM程序设计竞赛部分题解
举报原因:
原因补充:

(最多只允许输入30个字)