排位赛2-Snakes

题目

According to legend, St. Patrick banished all of the snakes in Mooland over a thousand years ago. However, snakes have since made their way back to Mooland! St. Patrick’s day was on March 17, so Bessie is going to commemorate St. Patrick by banishing all of the snakes from Mooland once and for all. Bessie is equipped with a net to capture snakes distributed in N groups on a line (1≤N≤400). Bessie must capture every snake in every group in the order that the groups appear on the line. Each time Bessie captures a group, she can put the snakes in a cage and start with an empty net for the next group.

A net with size s means that Bessie can capture any group that contains g snakes, where g≤s. However, every time Bessie captures a group of snakes of size g with a net of size s, she wastes s−g space. Bessie’s net can start at any size and she can change the size of her net K times (1≤K<N).

Please tell Bessie the minimum amount of total wasted space she can accumulate after capturing all the groups.

题意

有n团蛇,每团蛇都有一个数量,现在要重第一团蛇开始捕捉他们,一开始你可以设置你网的容量,后面又k次修改的机会,一次捕捉的亏损即捕捉这团蛇后网剩余的容量,求最小亏损。

解法

DP,f[i][j][k]表示第i团蛇网下容量为jx网的容量修改了k次的最小亏损,因为每团蛇的数量较大而蛇的团数较小,所以得将每团蛇得数量离散化,然后我们可以得到状态转移方程,f[i][j][k]=min(f[i-1][j][k],f[i -1][z][k-1])+j-a[i],明显可用滚动数组,如果每次都枚举z很明显时间上会超,其实只需要取k-1状态中最小值就可以了,这个可以在滚动数组交换时一起做了。

代码:

#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <math.h>
using namespace std;
const int maxn=410;
const int maxd=400000010;
int n,m,l,ans,a[1000010],c[1000010],d[1000010],f[maxn][maxn],ff[maxn][maxn],smin[maxn];
struct CC
{int id,x;
}b[maxn];bool rmp(CC x,CC y)
{return x.x<y.x;
}int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=n;i++) {scanf("%d",&a[i]);b[i].x=a[i];b[i].id=i;}sort(b+1,b+n+1,rmp);l=0;b[0].x=-1;for (int i=1;i<=n;i++) {if (b[i].x!=b[i-1].x) {l++;c[b[i].x]=l;d[l]=b[i].x;} }for (int i=1;i<=n;i++) a[i]=c[a[i]];for (int i=1;i<=m+1;i++) for (int j=1;j<=l;j++) {f[i][j]=maxd;ff[i][j]=maxd;smin[j]=maxd;}for (int i=a[1];i<=l;i++) ff[1][i]=min(ff[1][i],d[i]-d[a[1]]);smin[0]=maxd;for (int k=1;k<=l;k++) {smin[1]=min(smin[1],ff[1][k]);}for (int i=2;i<=n;i++) {for (int j=1;j<=m+1;j++){for (int k=a[i];k<=l;k++) {f[j][k]=min(f[j][k],ff[j][k]+d[k]-d[a[i]]);f[j][k]=min(f[j][k],smin[j-1]+d[k]-d[a[i]]);}}for (int j=1;j<=m+1;j++) {smin[j]=maxd;for (int k=1;k<=l;k++) {ff[j][k]=f[j][k];smin[j]=min(smin[j],f[j][k]);f[j][k]=maxd;}}smin[0]=maxd;}ans=maxd;for (int j=1;j<=m+1;j++)for (int i=1;i<=l;i++) ans=min(ans,ff[j][i]);printf("%d",ans);return 0;
} 

排位赛2-Snakes相关推荐

  1. [XMAN2018排位赛]Dragon Quest [MRCTF2020]VirtualTree

    文章目录 [XMAN2018排位赛]Dragon Quest 拖入ida v5 = start_quest((std::string *)v7); sanitize_input(v6); 核心代码1 ...

  2. 使命召唤12服务器系统,《使命召唤12》平衡技能系统 排位赛有专属服务器

    距离<使命召唤12:黑色行动3>发售还有一段时间,玩家们对于本作的多人模式对战都非常期待,因为有技能的存在,大家相信对战一定乐趣无穷,近日 Treyarch 工作室设计总监 David V ...

  3. 【万人千题】结对编程排位赛(第一期) 第二周 排名公布,冠军成功卫冕,啊这……

      博主会带领大家进行 <C语言入门100例> 和 <算法零基础100讲>的训练,每天把一些知识点巩固后做完相应练习题,和群友一起打卡,如果身边有志同道合之人,也可一起加入,今 ...

  4. 排位赛2-I Would Walk 500 Miles

    排位赛2-I Would Walk 500 Miles 题目 Farmer John wants to divide his N cows (N≤7500), conveniently numbere ...

  5. 基于Matlab的3-D胸部扫描CT切片的肺部分割——使用活动轮廓(snakes)进行三维分割及建模

    目录: 一.准备数据 二.肺部分割 三.创建种子MASK掩膜并使用活动轮廓(snakes)分割肺部 四.计算分割肺的体积 例程完整源码: 参考链接 本例程配套完整源码和数据下载 此示例显示了如何使用活 ...

  6. 排位赛1-A Cow Gymnastics

    排位赛1-A Cow Gymnastics 题目 In order to improve their physical fitness, the cows have taken up gymnasti ...

  7. 【​观察】美国公有云“排位赛”结束 中国市场正“步其后尘”?

    日前,Gartner发布全球公有云市场预测,2017年公有云市场将增长18.5%至2662亿美元,高于2016年的2196亿美元:其中IaaS占最大涨幅,2017年将增长36.6%至347亿美元. 市 ...

  8. 锻炼左右脑协调的摸鱼必备游戏——《Double Snakes》完整C语言代码!

    锻炼左右脑协调的摸鱼必备游戏--<Double Snakes>完整C语言代码! 目录 锻炼左右脑协调的摸鱼必备游戏--<Double Snakes>完整C语言代码! (一)运行 ...

  9. cf进服务器显示排位封停,cf枪王排位永久禁赛怎么解封(cf排位赛禁赛原因分析)...

    排位赛一直是各位CFer证明自己实力的一个地方,排位赛里大神云集,打起来和野战的感觉完全不一样.S8赛季已经进行这么长时间了,是不是还有好多小伙伴因为自己不能打排位赛而苦恼呢?究其原因,到底是为什么呢 ...

最新文章

  1. mysql5.6更改datadir数据存储目录
  2. python(matplotlib5)——Contours 等高线图
  3. 从Zabbix数据库中提取内存采集的数据,做内存使用率计算
  4. linux分区表导出与恢复,Linux下硬盘数据恢复与分区表恢复
  5. serv u服务器显示图片,图解经典FTP服务器工具 SERV-U最安全的设置【防止被入侵】...
  6. C# 合并多种格式文件为PDF
  7. wpf 代码获取contextmenu_wpf – 如何在动态创建的ContextMenu中添加水平分隔符?
  8. 析构函数 deinit
  9. 清华大学操作系统OS学习(十二)——信号量与管程
  10. 嵌入式C语言入门操作
  11. pcie转sata3硬盘不启动_XPS 笔记本: 排除对 BIOS 默认设置的更改导致无法开机自检/无引导/硬盘或未检测到 SDD 问题...
  12. ubuntu 下文件/文件夹 比较工具 DiffMerge
  13. LayerCAM:Exploring Hierarchical Class Activation Maps for Localization
  14. 射频识别技术漫谈(1)——概念、分类
  15. 市场调研中的定性/定量分析
  16. 黑盒测试与白盒测试(结合例子详细讲解)
  17. 柔宇科技奔赴上市为哪般?自称“销售规模较小”,合计亏超30亿
  18. kindle paperwhite 完美越狱,KPV / Koreader 安装
  19. 彩虹代刷网免授权+精美WAP端源码
  20. 美通企业日报 | 广州塔开业至今迎游客近1557万人次;居然之家成功借壳上市

热门文章

  1. 【小菜学网络】MAC地址详解
  2. 算法笔记(五)数论、进制、位运算、统计抽样、计算几何
  3. 十个经典免费软件和五★级网站![转]
  4. android加固 app插件化,自定义Gradle插件给应用加固
  5. 富盛Sbo插件集Ver1.2.0 简介及免费下载
  6. 5天破10亿的哪吒,为啥这么火,Python来分析 !
  7. ftp 服务器 单文件上传,ftp 服务器 单文件上传
  8. HTTP 400 Problem accessng /xxx/xxx Reason:bad request Powered by jetty://
  9. matlab曲面与直线交点,MATLAB中求椭圆与直线的交点为什么交点不在椭圆和直线上?...
  10. 数据挖掘十大算法——简介