题目背景

隔壁的新初一电脑班刚考过一场试,又到了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;
}

最新文章

  1. Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy
  2. Saddest&#39;s polar bear Pizza offered new YorkShire home
  3. java 22 - 7 多线程之控制线程的方法
  4. 树莓派B+上手小记--使用HDMI线连接显示器
  5. EntityFramework4.1开发
  6. 2D动态光照
  7. 需求分析Point
  8. C编译器、链接器、加载器详解
  9. 树莓派的演奏音符3 -- LCD1602显示文章
  10. Android开发之监听发出的短信
  11. FFmpeg源代码简单分析:avio_open2()
  12. Bootstrap3 多个模态对话框无法显示的问题
  13. Caching in Presto
  14. Nodejs mongoose 详解
  15. uvalive 3276 The Great Wall Game
  16. 隐马尔科夫_HMM
  17. Router components
  18. HtmlAgilityPack 详细使用
  19. 在Android Studio 和 Eclipse 的 git 插件操作 &quot;代码提交&quot;以及&quot;代码冲突&quot;
  20. jQuery(七):节点操作

热门文章

  1. Integer比较浅析
  2. java web.xml被文件加载过程及加载顺序小结
  3. VC-基础:MFC单文档程序架构解析
  4. idea Please specify commit message
  5. 关于POST的请求的问题的汇总
  6. numpy中tile函数
  7. PHP 递归无限极下级
  8. TCP/IP各种数据包结构体
  9. Linux rm删除文件未释放空间问题分析
  10. Day11名称空间,作用域,闭包函数