题目背景

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

题目描述

ZZY有独特的裁员技巧:每个同学都有一个考试得分ai(-1000<=ai<=1000),在n个同学(n<=500)中选出不大于k段(k<=n)相邻的同学留下,裁掉未被选中的同学,使剩下同学的得分和最大。要特别注意的是,这次考试答错要扣分【不要问我为什么】,所以得分有可能为负。

输入输出格式

输入格式:

第一行为n,k,第二行为第1~n位同学的得分。

输出格式:

一个数s,为最大得分和。

输入输出样例

输入样例#1:

5 3
1 -1 1 -1 1
输出样例#1:

3

说明

2014彭鲲志:“题目这么短一看就很水。”

Solution

这个题我一开始想用贪心做,结果发现,只有20分.

我的贪心思路是:

把所有正区间,和负区间都合并起来.

然后按和的大小排序.然后取m个.

很显然我是个** ,很明显还有更多正区间可能可以联上的没处理.

其实正解里面有贪心.

贪心:

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int n,m,c[maxn];
struct sj{
int w;
int id;
}t[maxn];
int num,ans; void pre()
{
for(int i=;i<=n;)
{
int flag=,now=c[i];
if(c[i]<)
{
while(c[i+flag]<)
{now+=c[i+flag];flag++;}
t[++num].w=now;
t[num].id=num;
i+=(flag);continue;
}
if(c[i]>=)
{
while(c[i+flag]>=&&i+flag<=n)
{now+=c[i+flag];flag++;}
t[++num].w=now;
t[num].id=num;
i+=(flag);continue;
}
}
} bool cmp(sj s,sj j){return s.w>j.w;} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&c[i]);
pre(); sort(t+,t+num+,cmp);
for(int i=;i<=m;i++)
ans+=t[i].w;
cout<<ans<<endl;
}

然后就去想DP,很好想.

状态定义:

  $f[ i ] [ j ]$ 表示当前到 $i$ 这个点,已经选了 $j$ 个区间.

转移方程也很好想:

$ f [ i ] [ j ] = max ( f[ i ] [ j ] , f[ k ] [ j-1 ]+ sum( k-->i ) );$

时间复杂度 O(n^3).

不过有 O(n^2) ?

DP

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int n,m,c[maxn];
int sum[maxn];
int f[maxn][maxn]; int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&c[i]),sum[i]=sum[i-]+c[i];
f[][]=c[];
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
f[i][j]=f[i-][j];
for (int k=;k<i;k++)
f[i][j]=max(f[i][j],f[k][j-]+sum[i]-sum[k]);
}
cout<<f[n][m]<<endl;
}

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 电脑班的裁员 解题报告

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

  4. P2389 电脑班的裁员

    题意:长度为n的序列,选出k个连续的字段,使和最大(有负数) 暴力只选正数且不考虑k的边界问题50(数据...) 正解从$O(n^3)到O(n)$不等,($O(n)$不会) DP 1.$O(n^3)$ ...

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

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

  6. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  7. 简单动态规划-LeetCode198

    题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...

  8. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  9. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

随机推荐

  1. socket使用非阻塞connect

    在使用tcp的connect调用时,默认是使用阻塞方式,当服务器当前不可用时,connect会等待(内部在重试?)直到超时时间到达,而这个超时时间是系统内核规定的,不能使用setSocketOpt来设 ...

  2. ScriptManager对象的属性

    --<本文属于摘抄> 属性 说明 EnablePageMethods 指定在ASPX页面上定义的公共静态方法是否可以从客户端脚本中作为Web服务方法调用 EnablePartialRend ...

  3. MIPS程序设计实例

    第一题:用系统功能调用实现简单输入输出 题目要求 利用系统功能调用从键盘输入,转换后在屏幕上显示,具体要求如下: 1.如果输入的是字母(A~Z,区分大小写)或数字(0~9),则将其转换成对应的英文单词 ...

  4. 油猴Tampermonkey 全局函数 它的注入函数都在 onload里面,直接写函数 都是内部函数,外部要是调用,就要挂靠到window上

    油猴Tampermonkey 全局函数 它的注入函数都在 onload里面,直接写函数 都是内部函数,外部要是调用,就要挂靠到window上 window.like111 = function (){ ...

  5. python自动化基础问题解析

      (1)自动化代码中用到的设计模式: po模式(page object): 1.PO提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰. 2.页面对象与用例分离,使得我们更好的复 ...

  6. linx vim 文件操作 ubuntu server 软件源

    mv /etc/danted.conf /etc/danted.conf.bak sudo wget https://files.cnblogs.com/files/marklove/danted.t ...

  7. 2019 opensuse linux Eclipse

    无法启动解决 eclipse.ini 尾部追加 --add-modules=ALL-SYSTEM /etc/hosts 追加 127.0.0.1 linux-xapw http://dl.google ...

  8. 五:SQL语句中的数据类型

    一:MySQL数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的 MySQL支持多种数据类型,大致可以分为三类:数值 日期/时间和字符串 二.数值类型(12) 2.1.整数类型(6) ...

  9. C++中四种强制类型转换方式

    类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比 ...

  10. idea14配置tomcat

    1.File -> New Project ,进入创建项目窗口 2.在 WEB-INF 目录下点击右键,New -> Directory,创建 classes 和 lib 两个目录 3.F ...