为了肾六

时间限制: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. Ubuntu17.04安装WineQQ7.8及微信

    安装qq2012成功,但是提示版本过低,qq登录失败. 安装WineQQ WineQQ7.8下载 安装依赖软件,方法来源网上 32位ubuntu:sudo apt install libgtk-3-0 ...

  2. kqueue演示样例

    网络server通常都使用epoll进行异步IO处理,而开发人员通常使用mac,为了方便开发.我把自己的handy库移植到了mac平台上. 移植过程中,网上竟然没有搜到kqueue的使用样例.让我吃惊 ...

  3. 数据结构 - 树形选择排序 (tree selection sort) 具体解释 及 代码(C++)

    树形选择排序 (tree selection sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 算法逻辑: 依据节点的大小, ...

  4. HDU 1392 凸包子

    Surround the Trees Problem Description There are a lot of trees in an area. A peasant wants to buy a ...

  5. jni javah

    如何通过javah生成jni头文件 1.javah的使用说明:   -classpath 给出包含native接口的java类的.class文件路径 -d / –o 指定生成的头文件的,-d只给出文件 ...

  6. nyoj--233--Sort it (水题)

    Sort it 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 You want to processe a sequence of n distinct integer ...

  7. kafka的使用

    kafka基于zookeeper. 需要安装kafka.zookeeper. 安装方法参考:http://tzz6.iteye.com/blog/2401197 启动zookeeper:点击zkSer ...

  8. java高级——生产者消费者问题

    多线程是一个很重要的应用,本节讲述多线程中同步问题 public class ThreadDemo { public static void main(String[] args) { Resourc ...

  9. Visual Studio蛋疼问题解决(1)

    监视变量显示未定义标识符: VS2012在编译的时候采用了较快的编译模式,所以有些变量就显示未定义了.  解决方案:  项目->属性->c/c++->优化->改为禁用/OD  ...

  10. POJ 1979 Red and Black (简单dfs)

    题目: 简单dfs,没什么好说的 代码: #include <iostream> using namespace std; typedef long long ll; #define IN ...