为了肾六

时间限制:4000 ms  |  内存限制:210535 KB
难度:2
描述

最近肾六很流行,goshawk看身边的朋友都用上了apple。自己还用着W年前的Samsung。于是决定去IT公司打工,都是为了肾六。现在上司让他解决下面的一个小问题,但是goshawk没学好算法,被这个问题难住了,聪明的你帮帮他吧。

给一个n个整数的序列p1,p2,p3.....pn。你要以下面的方式选k对整数。[l1, r1], [l2, r2], ..., [lk, rk] (1 ≤ l1 ≤ r1 < l2 ≤ r2 < ... < lk ≤ rk ≤ n; ri - li + 1 = m),  为了让这个表达式的值尽可能大。赶快帮他解决这个问题吧。

输入
第一行包含三个整数n,m,和k(1 ≤ (m × k) ≤ n ≤ 5000)。第二行包含n个整数p1,p2,p3.....pn(0 ≤ pi ≤ 10^9).
输出
单行输出一个整数。最大和的值。
样例输入
5 2 11 2 3 4 57 1 32 10 7 18 5 33 0
样例输出
961

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAXN 100010
long long sum[MAXN],num[MAXN];
long long dp[2][MAXN];
int main()
{
int m,n,k;
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
long long ans=0;
memset(sum,0,sizeof(sum));
memset(dp,0,sizeof(dp));
memset(num,0,sizeof(num));
for(int i=1;i<=n;i++)
{
scanf("%lld",&num[i]);
sum[i]=0;ans+=num[i];
if(i<m) continue;
for(int j=i;j>i-m;j--)
sum[i]+=num[j];
}
if(n==k||m==n)
{
printf("%lld\n",ans);
continue;
}
memset(dp,0,sizeof(dp));
ans=0;
for(int j=1;j<=k;j++)
{
for(int i=j*m;i<=n;i++)
{
dp[j&1][i]=max(dp[j&1][i],dp[j&1][i-1]);
dp[j&1][i]=max(dp[j&1][i],dp[(j-1)&1][i-m]+sum[i]);
ans=max(ans,dp[j&1][i]);
}
}
printf("%lld\n",ans);
}
return 0;
}


nyoj--1184--为了肾六(动态规划+滚动数组)的更多相关文章

  1. 2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组)

    2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组) https://www.luogu.com.cn/problem/P2516 题意: 给定字符串 \(S\) ...

  2. 动态规划+滚动数组 -- POJ 1159 Palindrome

    给一字符串,问最少加几个字符能够让它成为回文串. 比方 Ab3bd 最少须要两个字符能够成为回文串 dAb3bAd 思路: 动态规划 DP[i][j] 意味着从 i 到 j 这段字符变为回文串最少要几 ...

  3. POJ_1159 Palindrome (线性动态规划+滚动数组)

    题意是说,给定一个字符串,问至少还需要插入多少个字符才能使得该字符串成为回文字符串. 这道题一开始做的时候用了一个简单的动态规划,开了一个5000*5000的数组,用递归形式实现,代码如下: 其中d[ ...

  4. HDU-1024 Max Sum Plus Plus 动态规划 滚动数组和转移优化

    题目链接:https://cn.vjudge.net/problem/HDU-1024 题意 给n, m和一个序列,找m个不重叠子串,使这几个子串内元素和的和最大. n<=1e6 例:1 3 1 ...

  5. HDOJ-1024(动态规划+滚动数组)

    Max Sum Plus Plus HDOJ-1024 动态转移方程:dp[i][j]=max(dp[i][j-1]+a[j],max(dp[i-1][k])+a[j]) (0<k<j) ...

  6. HDU-10240Max Sum Plus Plus+动态规划+滚动数组

    Max Sum Plus Plus 题意:题意理解了老半天,这里是说在给定数列中,取m组子数列,不能有重复,使得这些子序列的和最大: 就比如m=2时候,1 /2/-4/5/6.可以不用拿-4的意思: ...

  7. 【动态规划】滚动数组的求解(C++)

    虽然接触动态规划算法已经有一段时间,给一个01背包问题,能够做到一个表格简单粗暴下去,然后求得结果,但心里总觉得对这个算法理解十分不到位,抱着对算法的热爱,网上很多大牛的算法思维实在让我佩服的五体投地 ...

  8. 动态规划(入门,滚动数组,记录的都是状态):SWUSTACM-1010 魔兽争霸之最后的反击

    题目: 1010: 魔兽争霸之最后的反击                                                                         Time Li ...

  9. NOIP 2006 金明的预算方案(洛谷P1064,动态规划递推,01背包变形,滚动数组)

    一.题目链接:P1064 金明的预算方案 二.思路 1.一共只有五种情况 @1.不买 @2.只买主件 @3.买主件和附件1(如果不存在附件也要运算,只是这时附件的数据是0,也就是算了对标准的结果也没影 ...

随机推荐

  1. Qt之qInstallMessageHandler(输出详细日志)

    简述 安装之前已定义的消息处理程序,返回一个指向前一个消息处理程序. 消息处理程序是一个函数,用于打印调试信息.警告信息.严重错误和致命的错误的消息.Qt库(debug模式)包含成百上千的警告信息打印 ...

  2. java去除反复的字符串和移除不想要的字符串

    在java开发中碰到了有些字符串是反复的,假设在进行业务处理要所有遍历太对的数据就会反复,所以在进行业务处理前进行一个去重操作. watermark/2/text/aHR0cDovL2Jsb2cuY3 ...

  3. HDU 1232 - 并查集 解题报告

    畅通project Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  4. 从头认识Spring-3.4 简单的AOP日志实现-扩展添加检查订单功能,以便记录并检測输入的參数

    这一章节我们再上一个章节的基础上加上一个检查订单功能 1.domain 蛋糕类: package com.raylee.my_new_spring.my_new_spring.ch03.topic_1 ...

  5. WinForm容器内控件批量效验是否同意为空?设置是否仅仅读?设置是否可用等方法分享

    WinForm容器内控件批量效验是否同意为空?设置是否仅仅读?设置是否可用等方法分享 在WinForm程序中,我们有时须要对某容器内的全部控件做批量操作.如批量推断是否同意为空?批量设置为仅仅读.批量 ...

  6. 打印全排列和stl::next_permutation

    打印全排列是个有点挑战的编程问题.STL提供了stl::next_permutation完美的攻克了这个问题. 可是,假设不看stl::next_permutation,尝试自己解决,怎么做? 非常自 ...

  7. 对Shell几个冷知识的总结(IFS,数组,替换,分割,查找)

    IFS: 对IFS的用处直接进行说明,详细IFS是干什么的...自行谷歌 首先创建一个 "a a",和"a"的文件: 然后我们 ls查看一下: --> l ...

  8. rails数据库操作rake db一点心得

    问题描述,对于很多的新手rails lover来说,搞定db是件头疼的事情,当建立了一个model,测试了半天发现我草列名写错了,再过一会儿发现association里面竟然没有xxx_id,这下子s ...

  9. [hihocoder #1384] Genius ACM 解题报告(倍增)

    题目链接:http://hihocoder.com/problemset/problem/1384 题目大意: 给定一个整数 M,对于任意一个整数集合 S,定义“校验值”如下: 从集合 S 中取出 M ...

  10. 理解class.forName()(good--字节码层面)

    使用jdbc方式连接数据库时会使用一句代码Class.forName(String className).这句话是什么意思呢?首先说一点Class.forName(String className)这 ...