题目大意:

我们需要将一串数字分成多个确定个数的连续段,在得到所有段的和的最大值

定义一个dp[i][j]数组表示在前j个数中取满 i 个段所能得到的最大值

那么也就是说明在这道题目当中每一段都是必须要被取到的

能够取到的前提是 j >= cnt[i] //表示前 i 段的数字个数总和

sum[i] 表示前 i 个数字之和

我们可以分成两种情况,一种是第i段取到以j号数字结尾

得到dp[i-1][j-l[i]] + sum[j] - sum[j-l[i]]

第二种是不以j号数字结尾

得到dp[i][j-1]

我们每次在其中取最大值就好了

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int INF = 200000000;
const int M = 22;
const int N = 1005;int dp[M][N] , l[M] , a[N] , cnt[M] , sum[N];int main()
{int m , n;while(scanf("%d" , &n) , n){scanf("%d" , &m);for(int i = 1 ; i<=m ; i++){scanf("%d" , l+i);cnt[i] = cnt[i-1] + l[i];}for(int i = 1 ; i<= n ; i++){scanf("%d" , a+i);sum[i] = sum[i-1] + a[i];}memset(dp , 0 , sizeof(dp));/*第一次用这个交为了防止结果允许为负数的情况,可以AC但是只是简单的dp初始为0,也没问题,个人感觉题目不是出的很严格for(int i = 1 ; i<= m ; i++)for(int j = cnt[i] ; j<=n ; j++)dp[i][j] = -INF;*/for(int i = 1 ; i<= m ; i++)for(int j = cnt[i] ; j<=n ; j++){dp[i][j] = max(dp[i-1][j-l[i]] + sum[j] - sum[j-l[i]] , dp[i][j-1]);}printf("%d\n" , dp[m][n]);}return 0;
}

转载于:https://www.cnblogs.com/CSU3901130321/p/4184591.html

HDU 1244 DP相关推荐

  1. HDU 5928 DP 凸包graham

    给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也 ...

  2. hdu 1171 dp(多重背包)

    View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...

  3. 整数行hdu 1244 Max Sum Plus Plus Plus(dp)

    废话就不多说了,开始... Max Sum Plus Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/3 ...

  4. HDU 4832(DP+计数问题)

    HDU 4832 Chess 思路:把行列的情况分别dp求出来,然后枚举行用几行.竖用几行,然后相乘累加起来就是答案 代码: #include <stdio.h> #include < ...

  5. hdu 5086(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5086 题目大意:给出长度为n的数组,然后要求累计里面的每个子串的和. 解题思路:这道题直接枚举肯定不行 ...

  6. hdu 2059(dp)

    龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Des ...

  7. HDU 3646 DP + 二分

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=3646 题意:你有N把武器,每把武器可以对敌人造成一定的伤害(et:攻击力500,敌人血量为200,杀死敌人 ...

  8. Hdu 4293 DP

    题意: n个人说自己前面有多少人 后面有多少人 求出说真话人数最多的情况 每个样例有 一个 n 表示n个人 接下来 n 行有a b 表示他前面的人数和后面的人数 思路: 如果已经知道了其中一组的人数~ ...

  9. HDU 1244 Max Sum Plus Plus Plus

    虽然这道题看起来和 HDU 1024  Max Sum Plus Plus 看起来很像,可是感觉这道题比1024要简单一些 前面WA了几次,因为我开始把dp[22][maxn]写成dp[maxn][2 ...

最新文章

  1. R语言广义线性模型Logistic回归模型列线图分析(nomogram)
  2. 【POJ2409】Let it Bead Pólya定理
  3. python画轨迹曲线-python 画3维轨迹图并进行比较的实例
  4. 【oracle】oracle经典sql,exception,database link纠错
  5. ubuntu 14.04下练习lua
  6. Selenium(Python)页面对象+数据驱动测试框架
  7. 计算机组成原理尾数的求法,计算机组成原理第八讲(运算办法).ppt
  8. Pr 视频效果:模糊与锐化
  9. Haar特征描述算子与人脸检测
  10. 2021年合肥工业大学《高等代数》试题和答案(蔡宇编辑)
  11. 服务器查看GPU及各个参数
  12. 愚人节恶搞html,愚人节来玩变装!爆笑在线恶搞照片网站
  13. 苹果维修服务器gsx查询,手机苹果官网怎么查序列号(苹果gsx免费查询公众号)...
  14. Appium 自动化测试(5)-- Appium详细介绍:Appium 手机自动化测试_TesterHome公开版pdf
  15. 语音转文字怎么转?三个方法让你学会怎么语音转文字
  16. AC自动机+状压dp hdu2825 Wireless Password
  17. 鸿蒙系统基于Linux打造,其本质还是安卓系统?
  18. jQuery源码解析(架构与依赖模块)
  19. arcgis风向_arcgis趋势分析
  20. Android视频编辑器(三)给本地视频加水印和美颜滤镜

热门文章

  1. mysql不支持子查询_MySQL不支持子查询优化一例
  2. python做自动化控制postman_python自动化测试入门篇-postman
  3. php mysql crud demo_基于php和mysql的简单的dao类实现crud操作功能_PHP教程
  4. java顺序栈和链栈_Java的顺序栈和链式栈
  5. [渝粤教育] 西南科技大学 中国现代文学 在线考试复习资料
  6. 【渝粤题库】陕西师范大学500006 算法语言 作业
  7. 布局 线宽 间距 走线 泪滴 过孔 【快速提升PCB板Layout质量的6个细节】
  8. 工业控制中无线局域网应用前景分析
  9. setitimer 创建两个定时器_UE4 Timer(定时器)相关源码分析
  10. python有多少库存_库存究竟多少才算合理?