题意:长度为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. 用IntelliJ IDEA建maven项目,如何解决main下无法创建java源文件

    一.缺少java源文件 如下图: 现在想要在main下面增加java源文件,效果图如下所示: 首先,在main目录下新建java文件夹,就是源文件目录, 然后,右键,选择Mark Directory ...

  2. 数据库学习笔记(二)MySQL数据库进阶

    MySQL 进阶 关于连表 左右连表: join 上下连表: union #自动去重 (当两张表里的数据,有重复的才会自动去重) union all #不去重 #上下连表示例: select sid, ...

  3. [MySQL]表创建外键失败:ERROR 1005 (HY000): Can't create table (errno: 150)

    在数据库中建立一个新表(表引擎为InnoDB)时, 需要用到外键, 所以就在建表的时候加了一句foreign key (column) references table_name.但是执行时出现 ER ...

  4. RPC: program not registered (ZT)

    When we trying to use a particular RPC  program, below may indicate that rpcbind is not running or t ...

  5. request 10.0 模块安装

     https://pypi.python.org/packages/49/6f/183063f01aae1e025cf0130772b55848750a2f3a89bfa11b385b35d7329d ...

  6. css水平居中,竖直居中技巧(一)

    css水平居中,竖直居中技巧(一)===### 1.效果 ### 2.代码#### 2.1.index.html <!DOCTYPE html> <html lang="z ...

  7. [转载]/etc/security/limits.conf解释及应用

    limits.conf的格式如下: username|@groupname type resource limit username|@groupname:设置需要被限制的用户名,组名前面加@和用户名 ...

  8. Entity Framework Tutorial Basics(26):Add Entity Graph

    Add Entity Graph using DbContext: Adding entity graph with all new entities is a simple task. We can ...

  9. HTML5应用程序缓存Application Cache详解.RP

    什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...

  10. 图--生成树和最小生成树.RP

    树(自由树).无序树和有根树    自由树就是一个无回路的连通图(没有确定根)(在自由树中选定一顶点做根,则成为一棵通常的树).    从根开始,为每个顶点(在树中通常称作结点)的孩子规定从左到右的次 ...