HDU1244:Max Sum Plus Plus Plus
题意:在n个数中取m段数使得这m段数之和最大,段与段之间不能重叠
分析:见代码
//dp[i][j]表示前i个数取了j段的最大值
//状态转移:dp[i][j]=max(dp[k][j-1]+(sum[k+l[j]-sum[k]或者sum[i]-sum[i-l[j]) (0<=k<=i-l[j])
// 这种做法是O(n^2)的
//如果改成O(n)的呢?
//需要加一个数组max_dp[i][j]表示前i个数取j段的dp最大值
//如果i>=l[j],dp[i][j]=max(dp[i][j],s[i-l[j]][j-1]+sum[i]-sum[i-l[j]]
//然后每次更新 max_len[i][j]=max(max_dp[i-1][j],dp[i][j])
//最后取dp[i][m]的最大值
//PS:说这道题是水题的人真的好好想过了吗?纵然你DP很厉害,也不能随便看看题目,发现是水题,然后抄了网上的代码,就完事了,
//真的有必要去多想想题目,百度出来的题解,一个抄一个,真的有意思?!!
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int n,m,l[],sum[],dp[][],max_dp[][]; int main()
{
while(scanf("%d",&n),n)
{
scanf("%d",&m);
memset(dp,,sizeof(dp));
memset(max_dp,,sizeof(max_dp));
for(int i=;i<=m;++i) scanf("%d",l+i);
for(int i=;i<=n;++i)
{
scanf("%d",sum+i);sum[i]+=sum[i-];
}
/*
//O(n)
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)for(int k=0;k<=i-l[j];k++)
dp[i][j]=max(dp[i][j],dp[k][j-1]+sum[k+l[j]]-sum[k]);
*/
//O(1)
for(int i=;i<=n;++i)for(int j=;j<=m;++j)
{
if(i>=l[j]) dp[i][j]=max(dp[i][j],max_dp[i-l[j]][j-]+sum[i]-sum[i-l[j]]);
max_dp[i][j]=max(max_dp[i-][j],dp[i][j]);
}
int ret=;
for(int i=;i<=n;++i) ret=max(ret,dp[i][m]);
printf("%d\n",ret);
}
}
HDU1244:Max Sum Plus Plus Plus的更多相关文章
- HDU 1024:Max Sum Plus Plus(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=1024 Max Sum Plus Plus Problem Description Now I think you ...
- HDU3415:Max Sum of Max-K-sub-sequence(单调队列)
Problem Description Given a circle sequence A[1],A[2],A[3]......A[n]. Circle sequence means the left ...
- HDU 1003:Max Sum(DP,连续子段和)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- HDU 1024:Max Sum Plus Plus(DP,最大m子段和)
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- ACM1003:Max Sum
Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum ...
- HDU-1003:Max Sum(优化)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- HDU 1024:Max Sum Plus Plus 经典动态规划之最大M子段和
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU 1003:Max Sum
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- LeetCode 363:Max Sum of Rectangle No Larger Than K
题目链接 链接:https://leetcode.com/problems/max-sum-of-rectangle-no-larger-than-k/description/ 题解&代码 1 ...
随机推荐
- Linux下出现launch failed.Binary not found的解决方案
Linux下出现launch failed.Binary not found的解决方案: Project->Properties->C/C++Build->Settings-> ...
- java基础 2 static关键字
2. static关键字 变量:静态变量在内存中只存在一份,只在类第一次实例化时初始化一次,同时类所有的实例都共享静态变量,可以直接同过类名 来访问他. 方法:静 ...
- mysql写入数据乱码问题的解决
mysql默认编码为latin. 我的mysql版本为5.6.安装路径下没有my.ini,但是有my-default.ini.其实mysql没有配置文件也是可以启动的,但是为了设置编码,需要将my-d ...
- MySQL注释(转)
MySQL支持3种注释风格: 1.从‘#’字符从行尾. 2.从‘-- ’序列到行尾.请注意‘-- ’(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格.tab.换行符等等). 3.从/ ...
- Spring MVC页面重定向实例
以下内容引用自http://wiki.jikexueyuan.com/project/spring/mvc-framework/spring-page-redirection-example.html ...
- Jekyll 搭建
Jekyll搭建个人主页 早上昨晚上弄hexo的时候就开始有问题,发现命令有错误!今天早上来就开始把另外建立了仓库,转Jekyll,并不顺利,做了一天了,基本的theme的本地和远端主页可以显示,但当 ...
- mysql innodb插入意向锁
innodb中有插入意向锁.专门针对insert,假设插入前,该间隙已经由gap锁,那么Insert会申请插入意向锁. 那么这个插入意向锁的作用是什么? 1.为了唤起等待.由于该间隙已经有锁,插入时必 ...
- android动画具体解释六 XML中定义动画
动画View 属性动画系统同意动画View对象并提供非常多比view动画系统更高级的功能.view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,由于View本身没 ...
- 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何
基于 Vue.js 之 iView UI 框架非工程化实践记要 像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...
- 解决echart在IE中使用时,在div中加入postion后图表不显示问题
<!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="height:400px;width:1 ...