虽然这道题看起来和 HDU 1024  Max Sum Plus Plus 看起来很像,可是感觉这道题比1024要简单一些

前面WA了几次,因为我开始把dp[22][maxn]写成dp[maxn][22]了,Orz

看来数组越界不一定会导致程序崩溃,也有可能返回一个错误的结果

dp[i][j]表示前j个数构成前i段所得到的最大值

状态转移方程:

dp[i][j] = max{dp[i][j-1],  dp[i-1][j-len[i]] + sum[j] - sum[j-len[i]]}

分别对应着不取第i个数和取第j个数及其之前相邻的共len[i]个数作为第i段加上之前的数构成i-1段构成的最大值

 1 //#define LOCAL
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6
 7 const int maxn = 1000 + 10;
 8 int a[maxn], sum[maxn], len[22], dp[22][maxn];
 9
10 int main(void)
11 {
12     #ifdef LOCAL
13         freopen("1244in.txt", "r", stdin);
14     #endif
15
16     int n, m;
17     while(scanf("%d", &n) == 1 && n)
18     {
19         scanf("%d", &m);
20         for(int i = 1; i <= m; ++i)
21             scanf("%d", &len[i]);
22         for(int i = 1; i <= n; ++i)
23             scanf("%d", &a[i]);
24         sum[0] = 0;
25         for(int i = 1; i <= n; ++i)
26             sum[i] = sum[i - 1] + a[i];
27         memset(dp, 0, sizeof(dp));
28         for(int i  = 1; i <= m; ++i)
29         {
30             for(int j = 1; j < len[i]; ++j)
31                 dp[i][j] = dp[i][j-1];
32             for(int j = len[i]; j <= n; ++j)
33                 dp[i][j] = max(dp[i][j-1], dp[i-1][j-len[i]] + sum[j] - sum[j-len[i]]);
34         }
35         printf("%d\n", dp[m][n]);
36     }
37     return 0;
38 }

代码君

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/3931550.html

HDU 1244 Max Sum Plus Plus Plus相关推荐

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

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

  2. HDU.1003 Max Sum

    原题 HDU.1003 Max Sum 分类 动态规划 题意 计算从一个序列中最大连续子序列和.对应的起始元素和终止元素的位置. 输入/输出 要求与格式 样例数的确定 最开始一行开始输入样例数 每个样 ...

  3. hdu 1003 Max Sum 解题报告

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Problem Description Given a sequence a[1],a[2],a[3 ...

  4. hdu 1003 Max Sum (DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)   ...

  5. [hdu 1003] Max Sum

    跟<算法导论(第三版)>上的一样,抄下来的 30 - 60 ms 标准的分治策略 1 #include <stdio.h> 2 3 int A[100000], Lenght; ...

  6. HDU 1024 Max Sum Plus Plus 动态规划

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1024 题目大意:n个数分成两两不相交的m段,求使这m段和的最大值. 解题思路:比较坑的点:n2 能过: ...

  7. HDU 1024 Max Sum Plus Plus

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1024 Max Sum Plus Plus Time Limit: 2000/1000 MS (Java ...

  8. hdu 1003 Max Sum

    DP可以这里给出非DP程序 题目传送门 1 #include<stdio.h> 2 int main() 3 { 4 int t,n,i,max,m,sum,ki,kj,k,a,b; 5 ...

  9. hdu - 3415 Max Sum of Max-K-sub-sequence

    题意:求一个环中最大区间和,区间长度 <= n. 用单调队列优化Dp,核心内容是dp[i] = max(sum[j]) - sum[i-1]. 这题最后的输出有很多要求,如果有多个解,输出起始位 ...

最新文章

  1. 中科院院士指出“万物互联”只是开始,“万物控制”是物联网下一个挑战
  2. 【Python-ML】神经网络激励函数-双曲正切(hyperbolic tangent,tanh)函数
  3. golang中的go mod开发
  4. 绕过html标签,巧妙绕过WAF的XSS技巧
  5. 在项目中缓存是如何使用的?
  6. 计算机加入域 不能访问网络位置 解决办法
  7. php html邮件,php发送HTML邮件
  8. EFCore-一对一配置外键小记
  9. 如何在Mac的内置词典中添加和删除单词
  10. namenode节点无法启动解决方法
  11. WWDC20中iOS的改变
  12. javaweb小说阅读网站源码
  13. 关于电的计算机公式,电气设计相关计算公式大全
  14. Navicat数据库查询时字体
  15. Markdown箭头总汇
  16. 初识Python自动化运维(一)
  17. 彩信发送失败原因是什么?如何解决?
  18. CSS代码缩写,占用更少的带宽/字体缩写/盒模型代码简写/颜色值缩写
  19. 使用虚拟信用卡在Poshmark下单教程和注意事项
  20. Google网站提交指南

热门文章

  1. 一个自己的tooltip
  2. docker 安装 oracle 11g
  3. Java Annotation认知(包括框架图、详细介绍、示例说明)
  4. yum配置中driver-class-name: com.mysql.jdbc.Driver报错
  5. IDEA 修改JavaWeb的访问路径
  6. Git上传项目到github
  7. select查询语句执行顺序
  8. 如何快速掌握一门新技术/语言/框架
  9. 14-angular.isDefined
  10. 首次构建android studio gradle 下载缓慢的问题