题意:长度为n的序列,选出k个连续的字段,使和最大(有负数)

暴力只选正数且不考虑k的边界问题50(数据。。。)

正解从$O(n^3)到O(n)$不等,($O(n)$不会)

DP

1、$O(n^3)$

以f[i][j]代表前i个数,选j段的最大ans

当前数不选:f[i-1][j]

当前数选:f[l][j-1]+s[i]-s[l](s为前缀和)

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define int long long
#define olinr return
#define _ 0
#define love_nmr 0
#define DB double
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
f=-f;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return x*f;
}
inline void put(int x)
{
if(x<)
{
x=-x;
putchar('-');
}
if(x>)
put(x/);
putchar(x%+'');
}
int a[];
int n;
int s[];
int k;
int tot;
int f[][];
signed main()
{
n=read();
k=read();
for(int i=;i<=n;i++)
s[i]=s[i-]+(a[i]=read());
for(int i=;i<=n;i++)
{
for(int j=;j<=k;j++)
{
f[i][j]=f[i-][j];
for(int l=;l<i;l++)
{
f[i][j]=max(f[i][j],f[l][j-]+s[i]-s[l]);
}
}
}
put(f[n][k]);
olinr ~~(^_^)+love_nmr;
}

2、$O(n^2)$优化(1)

对于f[l][j-1]-s[l]的最大值可以一边DP一边处理出来

这样就减少了一维的枚举

注意要先枚举j,这样才能处理出

因为l<i,所以在枚举i的时候可以处理出(1---i-1,j)的最大值,直接转移

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define int long long
#define olinr return
#define _ 0
#define love_nmr 0
#define DB double
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
f=-f;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return x*f;
}
inline void put(int x)
{
if(x<)
{
x=-x;
putchar('-');
}
if(x>)
put(x/);
putchar(x%+'');
}
int a[];
int n;
int s[];
int k;
int tot;
int f[][];
signed main()
{
n=read();
k=read();
for(int i=;i<=n;i++)
s[i]=s[i-]+(a[i]=read());
for(int j=;j<=k;j++)
{
int maxn=;
for(int i=;i<=n;i++)
{
f[i][j]=max(f[i-][j],maxn+s[i]);
maxn=max(maxn,f[i][j-]-s[i]);
}
}
put(f[n][k]);
olinr ~~(^_^)+love_nmr;
}

3、$O(n^2),空间O(n)$

以f[i][j]代表前i个分成j段,第i个可以不选的ans

以g[i][j]代表前i个分成j段,第j个必须选的ans

g[i][j]=max(g[i-1][j],f[i-1][j-1])+a[i]

f[i][j]=max(f[i-1][j],g[i][j])

显然第一维可以滚动掉(类似01背包倒着枚举)

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define int long long
#define olinr return
#define _ 0
#define love_nmr 0
#define DB double
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
f=-f;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return x*f;
}
inline void put(int x)
{
if(x<)
{
x=-x;
putchar('-');
}
if(x>)
put(x/);
putchar(x%+'');
}
int a[];
int n;
int k;
int tot;
int g[];
int f[];
signed main()
{
n=read();
k=read();
for(int i=;i<=n;i++)
a[i]=read();
for(int i=;i<=n;i++)
for(int j=k;j>=;j--)
{
g[j]=max(g[j],f[j-])+a[i];
f[j]=max(f[j],g[j]);
}
put(f[k]);
olinr ~~(^_^)+love_nmr;
}

P2389 电脑班的裁员的更多相关文章

  1. LG P2389 电脑班的裁员

    Description ZZY有独特的裁员技巧:每个同学都有一个考试得分$a_i(-1000 \leq a_i \leq 1000)$,在$n$个同学$(n \leq 500)$中选出不大于$k$段$ ...

  2. 洛谷P2389 电脑班的裁员(区间DP)

    题目背景 隔壁的新初一电脑班刚考过一场试,又到了BlingBling的裁员时间,老师把这项工作交给了ZZY来进行.而ZZY最近忙着刷题,就把这重要的任务交(tui)给了你. 题目描述 ZZY有独特的裁 ...

  3. P2389 电脑班的裁员 (动态规划)

    题目背景 隔壁的新初一电脑班刚考过一场试,又到了BlingBling的裁员时间,老师把这项工作交给了ZZY来进行.而ZZY最近忙着刷题,就把这重要的任务交(tui)给了你. 题目描述 ZZY有独特的裁 ...

  4. 洛谷 P2389 电脑班的裁员 解题报告

    题意: 给定一段长为N的序列,选取其中的至多M段使这些子段和最大. 当N=1000时,我们可以采用动态规划解法 令\(dp[i][j][k]\)代表当前选至位置\(i\)处于第\(j\)段当前是否选取 ...

  5. 【Luogu】P2389电脑班的裁员(DP)

    题目链接 sbt交了三遍才过是我的耻辱…… 就是设f[i][j]搞个三重循环DP一下,以上. #include<cstdio> #include<cstdlib> #inclu ...

  6. AMD宣布裁员7% 约710员工将失去工作

    10 月 17 日.美国芯片生产商 AMD 周四宣布将裁员7%.并公布了不及预期的第四季度业绩展望.这将是 AMD 自 2011 年以来的第三轮大裁员. 就在一周之前,AMD 宣布罗瑞德(Rory R ...

  7. 微软中国裁员曝光:在CD结束后!薪酬不变!

    聚众抗议的前诺基亚员工(腾讯科技配图) 腾讯科技 郭晓峰 腾讯科技刚刚获取了一份微软设备事业部中国区管理团队4日晚间发给被裁员工的补偿方案邮件. 邮件内容显示,微软承诺在收购诺基亚交易结束(2014年 ...

  8. Imcash:一边大裁员,一边大扩招,你能否成为区块链人才中的7%?

    农历春节后,互联网创业圈并不太平. 最早,滴滴被曝裁员,占比约为全员的15%,涉及员工约2000人.CEO程维在全员会议上称公司要做好过冬准备.此后,京东接棒,其裁员对象上升至副总裁级别高管,比例占到 ...

  9. 【公众号系列】SAP将裁员4400人,颤抖吧!

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]SAP将裁员4400人,颤抖吧! ...

随机推荐

  1. 2015.1.3 DataGridView中嵌入其它控件

    1.按正常方法绑定待嵌入列的值,先赋值为空也行. 2.添加combbox到datagrivdview中 dvaw.Controls.Add(cb_dir); 3.添加DataGridView Mous ...

  2. CentOS和Ubuntu系统下安装vsftp(助推大数据部署搭建)

    不多说,直接上干货! 同时,声明,我这里安装的vsftp,仅仅只为我的大数据着想,关于网上的复杂安装,那是服务和运维那块.我不多牵扯,也不多赘述. 一.CentOS系统里安装vsftp 第一步:使用y ...

  3. python爬虫(4)--Cookie的使用

    Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么 ...

  4. UAC(User Agent Client) 和 UAS(User Agent Server)

    SIP协议采用Client/Server模型.每一个请求(Request)触发服务器的一个操作:每个操作被称为方法(Method):每个请求除了指明具体方法外,还携带了一系列的头域(Header fi ...

  5. FTP批量下载数据文件

    包含ftp的命令脚本,建立临时文件. ::服务器连接信息 set username=root set password=root set ip=xxx.xxx.xxx.xxx set RemoteDi ...

  6. startactivityforresult使用

    与startactivity基本相同,不过需要传入(intent,int)第二个int为请求ID,用来识别 在该activity中还应该重写nActivityResult(int requestCod ...

  7. 2018多校第九场1010 (HDU6424) 数学

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6424 解法:找规律.因为最多三项,a1^a2^a3可以拆成(a1+2)+(a2+1)*a3,然后建成数 ...

  8. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

  9. boost::thread 库的使用

    转载自:http://blog.csdn.net/yockie/article/details/9181939 概要 通过实例介绍boost thread的使用方式,本文主要由线程启动.Interru ...

  10. PCL—点云分割(基于形态学) 低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5017428.html 1.航空测量与点云的形态学 航空测量是对地形地貌进行测量的一种高效手段.生成地形三维形貌一直 ...