[二分答案 DP检验 几何] BalkanOI 2017. Cruise

OI学习笔记之图论基础知识 图论基础知识 没有用的话qaq : Ummmm…图论的大部分知识本来早就有学过,只是一直没有写成博文来梳理,但既然上了qbxt DP图论就写一篇来总结下,主要是来听图论的,但…由于太菜的原因,DP听得天花乱坠QWQ 一,图:图是边和点组成的几何体 G=< V , E > V是点集合,E是边集 形如这样的东西就是一个图 二,图的相关基本概念 1,边:图上连接点和点之间的东西叫做边... 阅读详情

题意是给定平面内2000给点(都在y轴右边),要选出一些点,和原点组成多边形,求在多边形内的点的点权和除以多边形周长的最大值。

分数规划,二分答案

∑wi∑disi,j≥mid

∑w−mid∑disi,j≥0

这样求∑w−mid∑disi,j的最大值就行了

发现答案肯定是个凸多边形

考虑DP,把点按照极角排序,令 fi 为前 i 个点选出一些点的最大值。

那么 fi=max{fj+Query(j,i)−x×dist(i,j)}

其中 Query(i,j) 表示原点 i 和 j 形成的三角形包住的点的点权和,dist 表示距离

Query(i,j) 这个东西预处理一下,就可以 n2 DP了

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <set>
#include <cmath>
#include <assert.h>

using namespace std;

const int N=2010;
const double eps=1e-8;

int n;
double f[N];
struct Pt{
    int x,y,g,w; double val;
    Pt(int _a=0,int _b=0):x(_a),y(_b){}
    friend bool operator <(Pt a,Pt b){
        return b.val>a.val;
    }
    friend Pt operator -(Pt a,Pt b){
        return Pt(a.x-b.x,a.y-b.y);
    }
    double len(){
        return sqrt(x*x+y*y);
    }
}p[N],tmp[N];

inline double ang(Pt a,Pt b){
    return acos((a.x*b.x+a.y*b.y)/a.len()/b.len());
}

inline double dist(Pt a,Pt b){
    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}

int pos[N],b[N],g[N][N];

inline int Query(int x,int n){
    int ret=0;
    for(;x<=n;x+=x&-x) ret+=b[x];
    return ret;
}

inline void Add(int x,int y){
    for(;x;x-=x&-x) b[x]+=y;
}

inline bool check(double x){
    for(int i=1;i<=n;i++) f[i]=p[i].w-dist(p[i],Pt())*x;
    for(int i=2;i<=n;i++)
        for(int j=1;j<i;j++){
            f[i]=max(f[i],f[j]+g[j][i]-x*dist(p[i],p[j]));
        }
    for(int i=1;i<=n;i++) if(f[i]-x*dist(p[i],Pt())>=0) return true;
    return false;
}

inline void Pre(){
    for(int i=1;i<=n;i++){
        int cnt=0,tot=0;
        for(int j=i+1;j<=n;j++){
            tmp[++cnt]=p[j];
            tmp[cnt].val=ang(p[j]-p[i],p[i]);
            tmp[cnt].g=j;
        }
        sort(tmp+1,tmp+1+cnt);
        for(int j=1;j<=cnt;j++){
            pos[tmp[j].g]=j; b[j]=0;
        }
        for(int j=i+1;j<=n;j++){
            Add(pos[j],p[j].w);
            g[i][j]=Query(pos[j],cnt);
        }
    }
}

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].w),p[i].val=ang(p[i],Pt(0,-1));
    sort(p+1,p+1+n);
    Pre();
    double L=0,R=1e9,mid;
    while(R-L>eps){
        check(mid=(L+R)/2)?L=mid:R=mid;
    }
    printf("%.8lf\n",R);
    return 0;
}
【题解】牛客OI周赛1-提高组 C.序列 计数类DP+前缀和优化 链接:https://www.nowcoder.com/acm/contest/199/C 来源:牛客网 我们枚举不同数字的个数 xxx 。此时等价于这个问题,有 x 个箱子排成一排,任 意两个箱子之间距离不超过 k(超过 k 意味着可以把这个间距减小到 k,且是一个等价的序 列),第一个箱子和最后一个箱子的距离不超过 m 的方案数。设 F[i,j]F[i,j]F[i,j] 表示放置了 ii... 阅读详情

相关推荐

【Labview学习】——如何实现软件的中/英文切换

各位亲爱的小伙伴们大家好,这里是小万的labview专题,今天为大家带来的是软件的中/英文切换,在全球化的浪潮之下,各行各业发生着巨大的变化,emmm………… 以下是简单的演示图片,注意观察菜单栏和软件界面各控件的语言状态: 本次分享将分为两部分:菜单中英文切换&界面控件中英文切换 ** 菜单中英文切换 ** 1. 中/英文菜单制造 要想实现菜单的中/英文语言切换,就得做两个菜单,一个...

weixin_44827166的博客 1万+

【二分答案 && dp】 Bare Minimum Difference

进一步分析我们发现这道题我们只需要关注最小值和最大值,所以每个区间的和只要介于最小值和最大值之间就可以。如果从分割区间的方式出发,这道题很难进行维护,因为分割的方式多样,每一次不同的分割都会产生不同的结果。同时注意到分割区间至少分分割出两个区间,所以我们只需要把一个区间的可能性判掉就行了。但是我们并不需要求出具体的分割方式,我们只需要去检验当前分割方式是否可行即可。枚举所有可能得最小值,而后二分我们的答案,得出我们的最大值。我们注意到对于整个序列来说,子区间的个数最多只有。这样我们就得到了合法区间的范围。

鹭天 361

‌NTRU算法详细教程 | 2025年最新版(基于NIST后量子密码标准更新)

‌:NTRU是当前抗量子加密的黄金标准,‌。

blns_yxl的博客 1802

[BalkanOI2016]Cruise

题目大意:   平面直角坐标系内有n个点,每个点有一个点权。   你从原点p出发,走若干个点然后回到原点。   两个点之间只能笔直走,你的收获为你的路径围起来的区域内的所有店权和除以路径长度。   问最大收益。 思路:   不难发现:每走一步,相当于在路径形成的多边形中增加一个三角形。   我们可以预处理出所有这样以p为顶点的三角形内的点权和。   首先对于所有的点极角排序。...

weixin_33725272的博客 184

Windows下Python安装geopandas全攻略:解决GDAL依赖问题的5个关键步骤

本文详细解析了在Windows系统下安装Python地理空间分析库geopandas时,如何有效解决其核心依赖GDAL的编译难题。文章提供了五个关键步骤,包括理解依赖关系、获取预编译wheel文件、顺序安装及环境验证,旨在帮助用户绕过复杂的C++编译环境,顺利完成geopandas的安装部署。

weixin_28221501的博客 283

10X Genomics单细胞数据分析实战:从FASTQ到UMAP可视化的完整流程

本文详细介绍了10X Genomics单细胞数据分析的完整流程,从FASTQ原始数据处理到UMAP可视化。通过Seurat工具包实现数据质量控制、标准化、降维聚类和细胞注释,特别适合生物信息学新手学习。文章包含可复现的代码示例和常见问题解决方案,帮助研究者快速掌握单细胞测序数据分析的核心技术。

weixin_30952535的博客 534

[线段树 哈希] BalkanOI 2016. Haker

题目是给定一个字符串,有三种操作.一种是询问两个子串是否相同一种是区间内的 aa 变成 bb,bb变成 cc … zz 变成 aa一种是区间 [L,R][L,R] 变成原串的区间 [k,k+R−L][k,k+R-L] 的子串因为要判断是否相同,肯定就要HASH,因为第二种操作,要记一下每个字母出现的位置的hash值第三种操作的话,用前缀和记一下原串的hash,打一个标记就好了复杂度 O(nlogn×

CE玩家 506

COMSOL有限元仿真深度指南:连接薄结构与实体结构(I)

COMSOL有限元仿真深度指南:如何在结构力学仿真中连接薄结构与实体结构?

忘了面孔的Batou 1万+

Boss Rush (二分答案 + 状压DP)

1.枚举所有集合的时候,如果当前集合都没有被更新过,那就不用再去更新其他集合了,直接跳过。当前技能释放的最小时间为,集合中所有技能的冷却时间之和。伤害从释放的时间开始,到释放时间+len[i]-1结束,结束时间要和二分的时间T取min。但是时间并不固定,无法使得时间花费最少,所以考虑二分答案将时间固定,然后在这个时间范围内状压DP,看打出的最大伤害是否大于H。为了使得伤害最大,每个技能都在最小能释放的时间释放。,如果技能在时间x释放,那么将会在第。最后时间卡的很紧,要剪剪枝。......

Mr_dimple的博客 374

基于FPGA的AGC自适应增益控制系统开发

自动增益控制(AGC)是一种在接收信号过程中自动调整放大器增益的技术,以确保输出信号的幅度保持在一个恒定的水平。基于FPGA实现AGC系统具有高性能、低延迟和高度可配置的特点,广泛应用于无线通信、音频处理和雷达等领域。FPGA上的AGC系统提供了一种高效且灵活的方法来处理变化的信号环境。在实际应用中,通过合理的设计和优化,可以显著提高信号处理系统的鲁棒性和可靠性。

走向CTO的路上... 1694

YOLO26涨点改进 | 独家创新、损失函数改进篇 | TGRS 2025顶刊 | 带来AIoU小目标涨点损失函数,增强了目标检测中对边界框形状和尺寸的敏感度,适合复杂场景和小物体检测中有效涨点

AIoU损失函数通过自适应形状感知和尺寸敏感加权机制,有效解决了YOLO26原生损失函数在小目标检测中的缺陷。实验结果表明,AIoU损失函数在多个数据集上均取得了显著的性能提升,尤其在小目标检测和多任务场景下表现突出。自适应形状感知,对形状差异较大的目标给予更大惩罚,提高边界框拟合精度尺寸敏感加权,对小目标的宽高比例差异给予更大权重,增强模型对小目标特征的学习能力梯度连续性好,即使在IoU=0时仍能提供有效的梯度更新,解决小目标梯度消失问题。

qq_36130719的博客 158

二分答案dp

给定一个序列,有n+2个数,选择一个数i能获得一个ai,至少获得w的前提下,选的数的最小间隔是多少,考虑用二分答案解决,用二分选择答案,然后进行check即可,然后对于可以的答案取mid和右边,不可以的考虑取左边和mid。 对于check用dp进行,dp【i】代表从i到最后的n+1点通过最小x间隔能选出的最大值,对于第i个,我们知道要么选要么不选,若不选则dp【i】=dp【i+1】,选的话是dp【i+x+1】然后取max即可。 代码如下 /* * @Author: tunan * @Date: 2021

tmh 207

《时序分析、时序约束和时序收敛》专栏的说明与导航

《时序分析、时序约束和时序收敛》专栏的说明与导航(建议阅读)。

孤独的单刀 14万+

In Search of Gold【二分答案+树DP】

题目链接 题意:给一棵N个点的树,每条边有Ai、Bi权值可以选,现在问的是选K条边作为A边,其余N-1-K条边为B边,求最短直径。 一开始的时候,想直接在树上做一个DP,但是写完之后发现不对劲,如果我们直接在树上写DP的话,由于他们的关系是相互制约的,所以确实不大好维护,因为这个dp要考虑从祖先节点的另外的方向的节点。 所以,我二分了一个答案,假定现在直径为,接下去维护点u为根的子树,当选择kk个A边的时候,此时的可行解中的最小链长是多少?只要使得1节点(也就是根节点)存在合法解就可以证明...

既然弱小,就只顾变强就是了 629

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

NCPC2018 D.Delivery Delays[二分答案+DP check]

Delivery Delays 题意 100010001000个点,500050005000条边的无向图,披萨店在111号店.100010001000份披萨订单,每个订单有下单时间,送达地点,披萨制作出来的时间.你是快递员初始在111号点,每次可以拿无穷多披萨,送完以后返回111号点继续送,送餐的时候要求按照下单顺序送达,求等待时间最长的顾客的最小等待时间. 题解 其实这道题不难,读题的时候读漏了...

SUNSET 778

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【NOIP 模拟题】[T2] 王者荣耀(二分答案+dp)

胭脂妆,桃花醉了芬芳

reverie_mjp的博客 1345

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[Codeforces799F] [哈希] Beautiful fountains rows

%%%Manchery给每个区间随机一个权值,这样每个位置被哪些区间覆盖奇数次就可以用区间权值的xor值表示,假设为x,一个区间被哪些区间覆盖也可以用xor值表示,假设为y 那么满足x=y的区间就是符合条件的区间前缀和搞一搞,map记一记就好啦#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #

CE玩家 1493

OI回忆录&&战友介绍

在没有忘记之前,我们需要一种方式记录我们的曾经——题记 OI这条道路,荆棘密布,只有勇士才能踏上这条不归路而不至于无功而返 曾经 有勇士斩断荆棘救出沉睡的大自己100岁的公主,有骑士杀死恶龙迎娶高塔上的已经快凉了的佳人,有牧羊人打败巨人赢得万众敬仰假的。。。 OIer,只是少了童话色彩的战士 显然,并不是所有人都有屠龙的资质。。。 博主为什么这么中二??!!好吧,不中二了 ...

Coco_T的博客 5598

P1800 software [dp+二分答案]

softwaresoftwaresoftware Description\mathcal{Description}Description 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是相同的,并且是已知的,但完成不同软件的一个模块的时间是不同的,...

Zbr162的博客 302

[欧拉回路] 「Balkan OI 2016」Acrobat

一个图是欧拉图的充要条件是每个点度数是偶数且连通第一种操作是同时更改 aia_i 与 aja_j 的度数奇偶性,那么 aia_i 与 aja_j 之间连边,搞棵生成树,一个点的度数是奇数时就删去它与它父亲的边。然后用第二种操作把左边的点连通,再用第二种操作把左边度数为奇数的点连起来#include <cstdio> #include <iostream> #include <algorithm> #

CE玩家 449

【国集作业】【ARC074E】RGB Sequence【DP】

如此简单的DP我居然没有想出来,我好菜啊!!! 小视野链接 洛谷链接 题目大意 在一个长度为nnn序列上每格涂颜色(共三种颜色),给出mmm个三元组(xi,yi,zi)(xi,yi,zi)(x_i,y_i,z_i)表示要求在区间xixix_i~yiyiy_i中颜色种类等于ziziz_i,求方案数。 题解 DP 然而DP的状态有点妙,我这个菜鸡根本没想到 设f[i][j][k]f[i...

ezoixx118的博客 343

【XSY2564】sequence

Description 【题目描述】 给定一个长度为n的由['0'..'9']组成的字符串s,v[i,j]表示由字符串s第i到第j位组成的十进制数字。 将它的某一个上升序列定义为:将这个字符串切割成m段不含前导'0'的串,切点分别为k1,k2...km-1,使得v[1,k1]<v[k1+1,k2]<...<v[km-2,km-1]。 请你求出该字符串s的上升序列个数...

aijian7152的博客 219

轮廓线dp概述

轮廓线dp是动态规划的一种(据说还叫插头dp),就直接上例题了吧:Mondriaan’s Dream Mondriaan’s Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 19038 Accepted: 10852 Description Squares and rectangles fasc...

lvmaooi的博客 9329

二分答案加DP判断

题意:给定数列{an},任意改动其中至多k项,求相邻两项差的绝对值的最大值的最小值。 思路:二分答案(二分的区间可以优化),对于某一个二分值mid,采用DP检验其可行性。 设dp[i]表示考虑前i个数,且第i个数不变,至少需要改多少个才能使得答案不大于mid。 那么考虑下一个不变的数是a[j],则a[i+1]~a[j-1]这些数可以任意改变,前提是abs(a[i]-a[j]) 接下来枚举最

AAAAAAAAAAAAAAC 515

#134-(EZOI模拟赛)【DP】猪猪储蓄罐

Description 小林决定存钱准备买房。但是他平时花钱如流水,所以也存不出什么钱。因此他决定从最小最小的零钱开始存。而小林为了不让自己乱用钱,决定用那种不砸破拿不出钱的猪猪储蓄罐。但是在砸碎储蓄罐之前,小林还是不能知道自己到底有多少钱。请帮他计算他储蓄罐里最少有多少钱。只要知道最少就好了,好让他可以知道离渺茫的房子还差多少钱。 Input 第1行两个正整数E和F(1&lt;=E&lt;...

2017gdgzoi999的博客 1151

NOIP模拟 小C的数组(二分答案+DP验证)

qwq 【题目分析】 qwq考完发现做法已经接近了。。。。。DP太差了(考场还想区间DP。。。蓝瘦) 首先求最大值最小,方法很明显就是二分,然后考虑check函数。 很明显的一点,对于两点i,j,如果不需要修改,那么他们的计算结果一定小于等于二分值mid*(j-i),所以我们从最坏情况开始向前枚举。那么最坏情况就是修改所有点,我们记录dp[i]表示前i个全...

weixin_30916125的博客 203
上一篇: [最小斯坦纳树] Baltic OI 2016. Cities
下一篇: [线段树 哈希] BalkanOI 2016. Haker
LowestJN
博客等级 码龄10年 76粉丝 422原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值