甲虫

luogu 4870

题目大意:

在一个坐标轴上有n个露珠,每个露珠有m个水分,露珠会每隔一个时间单位就消失一点水分,现在有一只甲虫从原点出发,甲虫的移动速度是一个单位时间移动一个单位的距离,甲虫没碰到一个露珠就可以“秒杀”它,问甲虫最多可以迟到多少水分

前言:

本题是本蒟蒻AC的第一道紫题(^▽^)

输入样例

3 15
6
-3
1

输出样例

25

数据范围

0≤n≤300,1≤m≤1,000,000,−10,000≤x1,x2,…,xn≤10,0000 \le n \le 300,1 \le m \le 1,000,000,-10,000 \le x_1,x_2,\dots,x_n \le 10,0000≤n≤300,1≤m≤1,000,000,−10,000≤x1​,x2​,…,xn​≤10,000
对于所有 i≠j,xi≠xj。i \ne j,x_i \ne x_j。i​=j,xi​​=xj​。

解题思路:

我们可以求最小散失水分,以此来算出最大水分
首先设f[i][j][0/1]f[i][j][0/1]f[i][j][0/1]为吃掉第iii到第jjj个水分的最小散失,然后我们可以得出一下状态转移方程:
{f[i][j][0]=min(f[i+1][j][0]+(k−len+1)∗(a[i+1]−a[i]),f[i+1][j][1]+(k−len+1)∗(a[j]−a[i]))f[i][j][1]=min(f[i][j−1][1]+(k−len+1)∗(a[j]−a[j−1]),f[i][j−1][0]+(k−len+1)∗(a[j]−a[i]))\left\{\begin{matrix}f[i][j][0]=min(f[i+1][j][0]+(k-len+1)*(a[i+1]-a[i]),f[i+1][j][1]+(k-len+1)*(a[j]-a[i]))\\ f[i][j][1]=min(f[i][j-1][1]+(k-len+1)*(a[j]-a[j-1]),f[i][j-1][0]+(k-len+1)*(a[j]-a[i]))\end{matrix}\right.{f[i][j][0]=min(f[i+1][j][0]+(k−len+1)∗(a[i+1]−a[i]),f[i+1][j][1]+(k−len+1)∗(a[j]−a[i]))f[i][j][1]=min(f[i][j−1][1]+(k−len+1)∗(a[j]−a[j−1]),f[i][j−1][0]+(k−len+1)∗(a[j]−a[i]))​
其中k代表要吃多少个水滴,len表示已经吃了多少个水滴,然后它表示的就是从左边和右边分别往两个方向走

代码:


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,o,m,ans,a[350],f[350][350][2];
int main()
{scanf("%d %d",&n,&m);for (int i=1;i<=n;++i)scanf("%d",&a[i]);a[++n]=0;//从0出发sort(a+1,a+1+n);for (int i=1;i<=n;++i)if (a[i]==0) //找到0的位置{o=i;break;}for (int k=1;k<=n;++k){memset(f,127/3,sizeof(f));f[o][o][0]=0;//初值f[o][o][1]=0;for (int len=2;len<=k;++len)for (int i=1;i<=n-len+1;++i){int j=i+len-1;f[i][j][0]=min(f[i+1][j][0]+(k-len+1)*(a[i+1]-a[i]),f[i+1][j][1]+(k-len+1)*(a[j]-a[i]));//状态转移,k-len+1f[i][j][1]=min(f[i][j-1][1]+(k-len+1)*(a[j]-a[j-1]),f[i][j-1][0]+(k-len+1)*(a[j]-a[i]));ans=max(ans,(len-1)*m-min(f[i][j][1],f[i][j][0]));//取最优答案}}printf("%d",ans);
}

【区间DP】甲虫(luogu 4870)相关推荐

  1. 【LUOGU P1220】关路灯(区间dp)

    一开始直接搜索+剪枝,拿了50分,发现原来是搜索搜复杂了..因为搜索是可以过的 注意到题目中有一句''再回过头来关掉另一边的路灯,而事实并非如此,因为在关的过程中适当地调头有可能会更省一些" ...

  2. 0x53. 动态规划 - 区间DP(习题详解 × 8)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...

  3. BZOJ.1032.[JSOI2007]祖码(区间DP)

    题目链接 BZOJ 洛谷 AC代码: 区间DP,f[i][j]表示消掉i~j需要的最少珠子数. 先把相邻的相同颜色的珠子合并起来. 枚举方法一样,处理一下端点可以碰撞消除的情况就行. 当然合并会出现问 ...

  4. P1063-能量项链【区间dp】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1063 题目大意 有n个珠子组成环,每颗珠子的头尾标记连接,将两颗珠 ...

  5. POJ1179,P4342-[IOI1998]Polygon【区间dp】

    正题 POJ题目链接:http://poj.org/problem?id=1179 洛谷评测记录:https://www.luogu.org/recordnew/lists?uid=52918& ...

  6. 区间DP初探 P1880 [NOI1995]石子合并

    https://www.luogu.org/problemnew/show/P1880 区间dp,顾名思义,是以区间为阶段的一种线性dp的拓展 状态常定义为$f[i][j]$,表示区间[i,j]的某种 ...

  7. 【区间dp】洛谷 P1220 关路灯

    P1220 关路灯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 有一排路灯,老张有一个初始位置,他要把所有路灯都关掉.每个路灯都有各自的功率和坐标,问你关掉所有路灯所消耗 ...

  8. P2400 秘密文件(区间dp)

    P2400 秘密文件(区间dp) 两个相邻的缩短串拼接后仍然是缩短串. 本身是周期串也可以缩短. 不难发现是区间dp. 拼接缩短 自身缩短 输出答案维护ans(i,j)ans(i,j)ans(i,j) ...

  9. 【区间dp】洛谷 P3205 [HNOI2010]合唱队

    P3205 [HNOI2010]合唱队 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意:有一个初始队形,这个初始队形可以是任意队形 给定一个理想队形,问你通过以下的排列方式有几 ...

最新文章

  1. ajax更改dom,javascript – 用Ajax响应替换DOM节点
  2. linux send与recv函数详解
  3. 登录界面-安全密码设计
  4. 标准模板库(STL)学习指南之set集合
  5. 海盗云商插件_推销自己的海盗猫王运营商
  6. apache cxf_Apache CXF负载平衡和故障转移
  7. java dll 乱码_java调用c++ dll出现中文乱码 | 学步园
  8. 为什么很多程序员不用switch,而是大量的if……else if?
  9. 位、字、字节的区别 | 汇编伪指令db,dw,dd
  10. npm cnpm下载
  11. 发力“创新宇宙”,酒店集团如何破局商业革新?
  12. java基于spingboot+vue的拼团旅游系统 elementui
  13. unity3d人物跳_Unity人物跳跃效果
  14. Github骚操作绑定中国+86手机号码实现两步验证
  15. vCenter Server 相关介绍
  16. Python:实现reverse letters反向字母算法(附完整源码)
  17. 图像处理——使用模板对矩阵进行中值滤波(中值滤波模板)
  18. 在Visual Basic6.0中,如何实现简单加减乘除的程序编写?
  19. 【CSDN下载】下载热门资源一周精选
  20. 阿拉伯数字小写金额转换成中文大写金C额程序说明

热门文章

  1. php sorcket_PHP: Sockets - Manual
  2. 墨迹天气语音包_小米有品“智能AI翻译机”评测,还内置了语音助手,随身WiFi功能...
  3. linux脚本传参修改配置文件,shell脚本修改配置文件指定行的值
  4. 详解python运行三种方式_详解python调用cmd命令三种方法
  5. lnmp无法远程连接mysql_MySQL(一):设置root 可以远程连接MySQL
  6. 编程中的一种特殊递归-尾递归
  7. [JavaWeb-HTML]HTML标签_图片标签
  8. [Java基础]抽象类基础
  9. C++实现各种插入排序(直接,折半,希尔)
  10. matlab中图像轮廓变细,Matlab中,用bwmorph函数提取二进制图像的轮廓