E - Max Sum Plus Plus Plus HDU - 1244 (线性区间DP)
题目大意: 值得注意的一点是题目要求的是这些子段之间的最大整数和。注意和Max Sum Plus Plus这个题目的区别。
题解:
线性区间DP,对每一段考虑取或者不取。定义状态dp[i][j]指的是前i个数分为j段。
如果第j段不选的话dp[i][j]=dp[i-1][j],直接就是上一个状态的值。
如果选得话,dp[i][j]=dp[i-part[j]][j-1]+sum[i]-sum[i-part[j]]。前一共有i个数,第j段要占用i-part[j]个数,所以前j-1段要占用
i-part[j]个数。然后取最好的状态就行了。复杂度O(n*m)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=+;
ll dp[N][N];
ll arr[N];
ll part[N];
ll sum[N];
int main(){
ll n;
while(cin>>n,n){
ll m;
cin>>m;
memset(dp,,sizeof dp);
memset(sum,,sizeof sum);
for(ll i=;i<=m;i++) cin>>part[i];
for(ll i=;i<=n;i++) cin>>arr[i];
for(ll i=;i<=n;i++) sum[i]=sum[i-]+arr[i];
for(ll i=;i<=n;i++)
for(ll j=;j<=m;j++){
if(part[j]>i) dp[i][j]=dp[i-][j];
else dp[i][j]=max(dp[i-][j],
dp[i-part[j]][j-]+sum[i]-sum[i-part[j]]);
}
cout<<dp[n][m]<<endl;
}
return ;
}
E - Max Sum Plus Plus Plus HDU - 1244 (线性区间DP)的更多相关文章
- (最大m子段和) Max Sum Plus Plus (Hdu 1024)
http://acm.hdu.edu.cn/showproblem.php?pid=1024 Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/ ...
- hdu 4579 博弈+区间dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597 #include <cstdio> #include <cstring> ...
- hdu 5396 Expression(区间dp)
Problem Description Teacher Mai has n numbers a1,a2,⋯,anand n−1 operators("+", "-&quo ...
- You Are the One HDU - 4283 (区间DP)
Problem Description The TV shows such as You Are the One has been very popular. In order to meet the ...
- Dire Wolf HDU - 5115(区间dp)
Dire Wolf Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)Total ...
- HDU 5568 sequence2 区间dp+大数
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5568 题意: 求所有长度为k的严格升序子序列的个数. 题解: 令dp[i][k]表示以i结尾的长度为 ...
- Hdu 2513 区间DP
Cake slicing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU 1244 Max Sum Plus Plus Plus
虽然这道题看起来和 HDU 1024 Max Sum Plus Plus 看起来很像,可是感觉这道题比1024要简单一些 前面WA了几次,因为我开始把dp[22][maxn]写成dp[maxn][2 ...
- HDU 1024 max sum plus
A - Max Sum Plus Plus Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I6 ...
随机推荐
- django中的缓存以及跨域
django中的缓存 先来了解以下问题
- ShedLock-jdbc配置锁
项目初期为了快速响应业务开发,对于部分业务需要使用到定时任务功能模块,会直接嵌入到主流程代码中间.当业务增加,发展成分布式服务时,那些定时任务对整体而言重复执行.如果避免分布式服务中的定时任务单一执行 ...
- nopcommerce4.0 安装步骤
前言:近期因工作要求接触nopcommerce,最新版本为4.0,以下所有安装都是基于此版本.接下来我可能会写一系列,为了让自己更好的掌握,也希望能帮助到大家 好记性不如烂笔头,新手也可以避免走我的弯 ...
- Linux命令ip addr详解
熟悉Linux操作系统的同学对于ip addr命令应该不陌生,知道它是用来查看本地IP地址的,除了IP地址,其它额外的信息有必要了解一下. root@test:~# ip addr1: lo: < ...
- 如何设置mysql远程访问
如何设置mysql远程访问 Mysql默认是不可以通过远程机器访问的,通过下面的配置可以开启远程访问 在MySQL Server端: 执行mysql 命令进入mysql 命令模式, mysql> ...
- maven resource filter 说明和配置方法
<maven> <dependencies> <dependency> ... </dependency> </dependencies> ...
- PIGS POJ - 1149网络流(最短增广路---广搜) + 建图
题意: 第一行输入m和n,m是猪圈的数量,n是顾客的数量,下面n行 第 i+1行表示第i个顾客 , 输入第一个数字表示有几把猪圈的钥匙,后面输入对应的猪圈,最后一个数字输入顾客想买几头猪. 建图: 设 ...
- 三层架构——ATM + 购物车
三层架构:用户视图层.逻辑接口层.数据处理层. 一个功能,分成三层架构写,增加程序的可扩展性. 三层是互有联系的,从用户视图层开始写,涉及到那一层就到下一层去写,然后return 返回值,再写回来. ...
- Ubuntu添加新用户并给普通用户赋予root新权限
添加新用户 首先用adduser命令添加普通用户: #adduser newusername 只有在root权限才可以添加新用户 修改密码: #passwd username 赋予root权限 方法1 ...
- Centos7 中打开和关闭防火墙及端口
1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status f ...