首页 > 其他分享 >2024/9 4-8 笔记

2024/9 4-8 笔记

时间:2024-09-08 21:52:59浏览次数:3  
标签:柱子 RR int 高度 雨滴 2024 笔记 积水

[CCO2017] 接雨滴

题目描述

晚上,夜黑风高,大雨疯狂地从天而降。

Lucy 想要接住一些雨滴,但她只有有限的工具。她有一套不同高度的柱子来接住雨滴。每根柱子的高度为整数,宽度为 \(1\)。她排列好柱子之后,就会用其他器具夹紧柱子,来让雨滴顺利地储存在柱子的间隙里。你可以认为雨滴的数量是无限的。

举个例子,如果 Lucy 有高度分别为 \((1,5,2,1,4)\) 的五根柱子,她可以这样排列柱子。

 *   
 *  *
 *  *
 ** *
*****

这样会接住 \(5r\) 雨滴(\(r\) 代表 \(1\) 个单位的雨滴)。

为了方便表述,我们定义 \(r\) 为雨滴的单位。

 *   
 *RR*
 *RR*
 **R*
*****

当然了,她也可以这样摆放柱子,这样可以接住 \(6r\) 雨滴。

 *   
 *RR*
 *RR*
**RR*
*****

再举一个例子,如果柱子的高度分别为 \((5,1,5,1,5)\),Lucy 可以接住 \(8r\) 雨滴。

*R*R*
*R*R*
*R*R*
*R*R*
*****

最后一个例子,如果柱子的高度分别为 \((5,1,4,1,5)\),她可以接住 \(9r\) 雨滴。

*RRR*
*R*R*
*R*R*
*R*R*
*****

Lucy 有 \(n\) 个高度为 \(h_1,h_2,...,h_n\) 的柱子。她想知道,在所有可能的摆放方案中,所有可能的雨滴量(以 \(r\) 为单位)是多少。(具体可看样例解释)

slove

结论:对于某个柱子 x 上方的积水体积,可能产生的所有体积都是合法的。

证明:

首先,形成积水肯定需要两个高柱子,即最高柱和次高柱。我们先放好。接着,我们要插入一个柱子\(x\),考虑\(x\)上方能增加多少积水体积。

1)若我们想让x上方没有积水

我们找到柱子\(y\),使得\(Hy <= Hx\),\(Hy\)最小并且y上方没有积水。
我们再找一个比\(y\)更高的柱子\(z\)
image
https://excalidraw.com/
将\(x\)插在\(y\)和\(z\)之间且紧贴着\(z\)。
image
因为我们找到的 \(y\) 是所有高度不大于 \(x\) 号柱子、且上方没有积水的柱子里最低的那一个,因此 \(z\) 高度一定大于等于 \(x\) (不然找到的就该是 \(z\) 了),于是这么插入不会产生新的积水。

在\(y\)存在的情况下,由于有最高峰,所以\(z\)一定存在。如果y不存在,那么不被积水覆盖的柱子都比x高,直接把x放在边界。
image

因此,一定有一种方案使得插入x后总共先不变。

2)设有一个比他高的柱子\(y\),要使得总贡献增加\((a{_y}-a{_x})\)
1.如果y没有被积水覆盖

image
除非\(y\)是最高峰,一定可以插到y的一侧满足总贡献增加\((a{_y}-a{_x})\)

2.如果\(y\)被覆盖了。

找到一个离\(y\)最近的,最低的且没有被积水覆盖的柱子\(z\).
image
我们把\(y\)换为\(x\),贡献变为了\((a{_y}-a{_x})\), 把\(y\)抽出来,按照1)处理即可。

3)如果\(y\)未被插入,从大到小插入就可以。

综上,对于某个柱子 $
x $上方的积水体积,可能产生的所有体积都是合法的。

背包转移,bitset优化。


using namespace std;

const int maxN=5e2+5,maxH=5e1+5;

int a[maxN];
bitset<maxN*maxH>dp,tem;

int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&a[i]);
    }
    sort(a+1,a+1+n);
    dp[0]=true;
    for(int j=1;j<n;++j)
    {
        for(int st=j+1;st<n;++st)
        {
            tem|=(dp<<(a[st]-a[j]));
        }
        dp|=tem;
    }
    for(int i=0;i<=25000;++i)
    {
        if(dp[i])
        {
            printf("%d ",i);
        }
    }
}

标签:柱子,RR,int,高度,雨滴,2024,笔记,积水
From: https://www.cnblogs.com/Kang-shifu/p/18403530

相关文章

  • 20240909_011725 c语言 预处理
    在C语言中,第一行#include<stdio.h>是一个预处理指令,用于包含(或说,导入)标准输入输出库(StandardInputOutputLibrary)的头文件。这个库提供了进行输入输出操作的函数,比如printf()用于在屏幕上显示输出,scanf()用于从键盘读取输入等。具体来说:#include是一个预处理指令,告诉编译器......
  • 【深度学习】嘿马深度学习笔记第8篇:卷积神经网络,学习目标【附代码文档】
    本教程的知识点为:深度学习介绍1.1深度学习与机器学习的区别TensorFlow介绍2.4张量2.4.1张量(Tensor)2.4.1.1张量的类型TensorFlow介绍1.2神经网络基础1.2.1Logistic回归1.2.1.1Logistic回归TensorFlow介绍总结每日作业神经网络与tf.keras1.3神经网络基础......
  • 20240909_021725 c语言 骨架结构
    关注骨架结构明确intmainreturn0的意义与功能......
  • C++笔记19•数据结构:红黑树(RBTree)•
    红黑树1.简介:    红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。当搜索二叉树退化为单支树时,搜......
  • CCPC2024 网络预选赛游记
    没啥可写的啊。考前一天晚上和考试上午做了几套cf。就上来50分钟三个人一直刷新,刷到40分钟刷出来两道签到题题面,然后签了。后来分头开题,J按位确定15分钟,他俩写了3题我都没确定出来,给车昱辉做他说线性基两下就行了。然后做了一个I,读了半天题没读明白。然后题干改写成了每个人......
  • 电赛2024年H题智能小车基于MSPM0G3507主控MCU(利用8路灰度加上MPU6050的解决方式)
    一.前言        前段时间,激烈的电赛刚刚结束,很荣幸啊,也是十分的不甘心,本次的湖北赛区H题只拿到了一个省二,看最终的排名,在H题中我们离省一也就差几名。但是整个比赛已经过去了,现在不甘与不舍,也没有任何意义了,只有接收这一现实了。    当时我们整个比赛要求一......
  • JavaWeb学习笔记,关于HTML的入门标签及属性
    一.HTML入门结构标签以及特点   以上标签即为HTML的入门标签,包括了HTML的基本框架结构标签以及部分常用标签,需要注意的是,HTML的语法松散,但我们更要严格要求自己,使用正常符合要求的代码格式,以免后期出现错误而无法及时发现问题,值得提起的还有,<h1>到<h6>是HTML中预定义好......
  • DAY20240908 VUE:一文带你了解Vue Router中的声明式导航
    VUE:声明式导航一、链接跳转方式-------声明式导航的引入二、声明式导航三、官方文档四、引入一、链接跳转方式-------声明式导航的引入链接跳转可以用location.href跳----编程式跳转js的跳转方式链接跳转可以用超链接跳声明式跳转端口号域名都可以省略。3-13......
  • 《动手学深度学习》笔记3——矩阵求导
    李沐老师的讲解思路是先从数学概念引入,讲完以后再到代码实现:1.数学概念1.1标量导数1.2向量求导(梯度)分为四种情况:1.2.1标量y,关于向量x求导李沐老师这里先讲了y为标量,x为向量的情况,x是长度为1的列向量,关于列向量的导数(即梯度)是行向量,具体解释如下:在这个例子里, ......
  • 《动手学深度学习》笔记4——线性回归 + 基础优化算法
    李沐老师:线性回归是机器学习最基础的一个模型,也是我们理解之后所有深度学习模型的基础,所以我们从线性回归开始1.线性回归由于是案例引入,没有很难的知识点,咱直接贴上李沐老师的PPT:1.1线性模型--单层神经网络李沐老师:神经网络起源于神经科学,但现在深度学习的发展......