【HDU3480】Division 斜率优化/四边形不等式优化

【中英双语】Illumina测序原理详解 | 边合成边测序/Sequencing by Synthesis 很多朋友们问我视频讲解时用的笔记可不可以分享,那当然必须是可以呐!但我当时其实没有好好记录,只是打了个草稿就开讲啦!既然大家有需求,俺就重新整理了一下,希望可以帮到大家! 阅读详情

原题走这里

首先很容易想到给原数组排序,于是最大值和最小值就变成最左和最右。明显是选取连续的区间最优,于是原问题就转化为了区间DP,设前 i i 个中选取j个区间的最优解为 d[i][j] d [ i ] [ j ] ,转移方程:

d[i][j]=min(d[i−1][k]+(s[j]−s[k])2) d [ i ] [ j ] = m i n ( d [ i − 1 ] [ k ] + ( s [ j ] − s [ k ] ) 2 )
其中s是前缀和
然而复杂度过大,于是我们需要斜率优化。原式展开:
d[i][j]=d[i−1][k]+s[j]2−2s[j]s[k]+s[k]2 d [ i ] [ j ] = d [ i − 1 ] [ k ] + s [ j ] 2 − 2 s [ j ] s [ k ] + s [ k ] 2

移项:
d[i−1][k]+s[k]2=2s[j]∗s[k]+d[i][j]−s[j]2 d [ i − 1 ] [ k ] + s [ k ] 2 = 2 s [ j ] ∗ s [ k ] + d [ i ] [ j ] − s [ j ] 2

于是就变成了可以斜率优化的形式:
y=d[i−1][k]+s[k]2 y = d [ i − 1 ] [ k ] + s [ k ] 2
x=s[k] x = s [ k ]
k=2∗s[j] k = 2 ∗ s [ j ]
b=d[i][j]−s[j]2 b = d [ i ] [ j ] − s [ j ] 2
单调队列维护一波凸函数就可以啦。具体见代码。

代码如下:

#include <bits/stdc++.h>
using namespace std;
int n,m,t,a[10010],s[10010],d[2][10010],q[10010];
int dp()
{
    for(int i=1;i<=n;i++)
    {
        d[1][i]=(a[i]-a[1])*(a[i]-a[1]);
    }
    for(int i=2,cur=0;i<=m;i++,cur^=1)
    {
        int head=0,tail=0;
        q[tail++]=i-1;
        for(int j=i;j<=n;j++)
        {
            while(head+1<tail)
            {
                int y1=d[cur^1][q[head]]+a[q[head]+1]*a[q[head]+1];
                int x1=a[q[head]+1];
                int y2=d[cur^1][q[head+1]]+a[q[head+1]+1]*a[q[head+1]+1];
                int x2=a[q[head+1]+1];
                if(y1-2*a[j]*x1>=y2-2*a[j]*x2)head++;
                else break;
            }
            d[cur][j]=d[cur^1][q[head]]+(a[j]-a[q[head]+1])*(a[j]-a[q[head]+1]);
//          cout<<i<<' '<<j<<' '<<q[head]<<' '<<d[cur][j]<<' '<<d[cur^1][q[head]]<<endl;
            while(head+1<tail)
            {
                int y1=(d[cur^1][j]+a[j+1]*a[j+1])-(d[cur^1][q[tail-1]]+a[q[tail-1]+1]*a[q[tail-1]+1]);
                int x1=a[j+1]-a[q[tail-1]+1];
                int y2=(d[cur^1][q[tail-1]]+a[q[tail-1]+1]*a[q[tail-1]+1])-(d[cur^1][q[tail-2]]+a[q[tail-2]+1]*a[q[tail-2]+1]);
                int x2=a[q[tail-1]+1]-a[q[tail-2]+1];
                if(y1*x2<=y2*x1)tail--;
                else break;
            }
            q[tail++]=j;
        }
    }
    return d[m&1][n];
}
int main() {
    cin>>t;
    for(int j=1;j<=t;j++)
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        sort(a+1,a+n+1);
        printf("Case %d: %d\n",j,dp());
    }
    return 0;
}
从零到一:构建嵌入式Arm-Linux的Qt MQTT通信框架全指南 本文详细指导如何在嵌入式Arm-Linux平台上从零构建Qt MQTT通信框架,涵盖交叉编译、环境配置、依赖库管理及性能优化。重点针对32位Arm架构,提供完整的工具链配置、编译步骤和实战部署方案,适用于物联网和工业控制等场景。 阅读详情

相关推荐

双硬盘下Ubuntu 16.04与Win10双系统的安装

之前写过一个双系统安装过程,今天再次整理的原因是想重点强调双硬盘的区别。标红的一定要注意看,那就是我自己一步一步踏出来的坑啊...   基础步骤就不再重复,重点讲区别,需要看详细步骤的童鞋(或者你只有一个硬盘)请看我上一篇博客https://blog.csdn.net/weixin_40308540/article/details/80157444   区别:双硬盘和单硬盘的区别是什么呢?...

不吃包子 1116

斜率优化 hdu3480 pku3709 pku1180 pku2180

<br />      斜率优化是DP优化的一种,假设状态转移方程为dp[i]=min or max (dp[k]+w[i,k]),我们假设取其中两个解k1,k2(不妨设k1<k2),然后得到dp[k1]+w[i,k1]-(dp[k2]+w[i,k2])这个表达式,不妨设结果想取

qjklw 1726

I-Cache 和 D-Cache

I-Cache 和 D-Cache

liuyuanbin9001 7009

hdu 3480 dp 四边形不等式优化

给出一个数字集合 S,大小为 n,要求把这个集合分成m个子集,每分出一个子集的费用是子集中的 (max-min)^2,求最小费用。 开始的dp转移很容易想到。 首先对集合从小到大排序,dp[i][j] 表示前i个元素被分成j个子集的最小费用。然后枚举最后一个子集。 dp[i][j] = min{dp[k-1][j-1] + cost(k, i)};

xuelanghu407 1038

FPGA以太网接口设计避坑指南:GMII与RGMII时序转换的三种实现方案对比

本文深入解析FPGA以太网接口设计中GMII与RGMII时序转换的三种实现方案,包括Xilinx官方IP核、手工原语逻辑和开源方案gmii_to_rgmii。通过对比分析各方案的优缺点和适用场景,为工程师提供技术选型指南,帮助避免常见设计陷阱,提升高速网络设备开发的效率和可靠性。

weixin_42570484的博客 362

香橙派5B-RK3588-NPU内核升级至0.9.8:RKLLM多模态部署实战

本文详细介绍了香橙派5B-RK3588设备NPU内核升级至0.9.8版本的完整流程,重点讲解了升级的必要性、两种升级方案(预编译包安装与自行编译内核)以及RKLLM SDK的安装配置。通过实战演示多模态模型转换与推理,显著提升AI计算性能,为嵌入式AI部署提供实用指南。

salt9的博客 1020

HDU - 3480 Division(四边形优化)

题目大意:给出N个数,要求你分成M个集合,使得每个集合的(最大值 - 最小值)^2的和达到最小解题思路:先排个序 用dp[i][j]表示前几个数字分成i个集合的最小和 则dp[i][j] = dp[i - 1][k] + w[k + 1][j] w[k + 1][j]表示[k + 1, j]这个集合的(最大值-最小值) ^ 2#include <cstdio> #include <cstrin

静静地码 579

ADB命令解锁Android手机屏幕的3种实用方法(附详细步骤)

本文详细介绍了在Android手机屏幕失灵或密码遗忘时,利用ADB命令解锁屏幕的三种实用方法。包括通过ADB模拟输入事件、移除锁屏认证文件(需Root权限)以及结合恢复模式抢救数据。文章提供了详细的操作步骤与风险提示,强调提前开启USB调试的重要性,是Android用户应对紧急锁屏情况的有效技术指南。

weixin_29229055的博客 891

HDU3480(Division 斜率优化dp入门题)

题目 题意: n个数分成m组,每组的花费是(max-min)^2,求最小花费; 先对所有数字的权值从小到大排序。 dp[i][j]:前 j 个数分成 i 组. 则转移方程为:dp[i][j]=dp[i-1][k]+(a[j]-a[k+1])^2.(0<=k<j) 把外层循环 i 看作定值,j 是状态变量,k 是决策变量。方程存在项 2 * a[j] * a[k+1],应考虑使用斜率优化...

qq_42576687的博客 374

AB相增量式编码器以及STM32定时器编码器模式测速/测距离(HAL库)

编码器(Encoder)是一种用于测量旋转运动或位置的设备。编码器通常与定时器模块一起使用,以便在微控制器中获取和计算旋转的脉冲数量,从而确定物体的运动方向和距离。编码器在许多应用中都很有用,例如机器人运动控制、电机位置反馈和位置传感。STM32微控制器提供了多种类型的编码器支持,其中一种常见的编码器类型是增量编码器。增量编码器基于两个脉冲信号通道,通常称为A相和B相。当旋转发生时,这两个信号通道的相位关系会发生变化,从而可以计算出旋转方向和旋转的步数。

嵌入式软件工程师的博客 1万+

AIGC内容溯源技术:如何追踪AI生成内容的原始来源

本文旨在系统性地介绍AIGC内容溯源的技术体系,帮助读者理解如何追踪AI生成内容的来源。我们将覆盖从基础概念到前沿技术的完整知识链,包括但不限于数字水印、区块链存证、内容指纹等技术方案。文章将从AIGC的基本概念出发,逐步深入探讨各种溯源技术,分析其原理和实现,最后讨论实际应用和未来趋势。AIGC:AI Generated Content,人工智能生成内容内容溯源:追踪数字内容的创作、修改和传播历史数字水印:嵌入在数字内容中的不可见识别信息数字水印:隐藏在内容中的识别信息,像隐形墨水内容指纹。

SuperAGI2025 2062

HDU3480-----用四边形不等式优化的DP

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3480 题意: 给你n个数字,要你把他们划分成m个集合 然后每个集合付出的代价就是每个集合中最大值减最小值的平方 要你求出在最有划分后使得总的代价最小 我们可以先进行排序,然后得出状态方程: dp[i][j] = min{dp[i-1][k] + (a[j]-a[k+1])*(a[j]-a[

Bob Lee's Blog For CS 844

2023华为od机试C卷【最富裕的小家庭】C++ 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 1229

hdu 3480 Division(斜率优化/四边形不等式)

题意:给你一堆数,让你组成m个集合,集合的价值是集合内元素的最大值与最小值的差的平方,求m个集合的价值总和最小 思路: 先给出TLE代码,斜率优化下次给出,转移方程dp[i][j]=min(dp[i][j],dp[i-1][k]+(a[j]-a[k+1])*(a[j]-a[k+1]));(ps:tzw竟然说买包烟十个人,九个人都会斜率优化过题,emmm) #include <bit...

weixin_30515513的博客 151

WINCC7.3破解文件

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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

hdu 3480 Division (斜率优化||四边形不等式)

Division Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 999999/400000 K (Java/Others) Total Submission(s): 2676    Accepted Submission(s): 1056 Problem Description Little D is re

To be what you what to be! 2018

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

HDU 3480 Division 题解

Hdu 3480

中国计算机学会成都七中(高新校区)委员会委员活动室 387

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

斜率优化回顾

(懒得排版了....^w^) 今天刷了一天Dp的题,做恶心了,刚刚做到一个既能斜率优化,又能四边形不等式优化的题 : hdu 3480 Division 斜率优化....好吧,我忘了怎么写了........ YY..... ..... ...

abc1481072716的博客 135

【四边形或斜率优化】HDU 3480 Division

通道 题意:给出n个数字,要你把这n个数字分成m堆,每一堆的价值是(max(val)-min(val))^2要你求出分成m堆之后得到的最小价值 思路:排序,dp[i][j]表示前j个数字,分成i堆的最小价值,dp[i][j]=min(dp[i-1][k]+(val[j]-val[k+1])^2) 。 代码: #include <cs...

108

Division(斜率优化 四边形优化 dp)

原题: http://acm.hdu.edu.cn/showproblem.php?pid=3480 题意: n个数排序后,分成多段,每一段是最大值减最小值的平方,求和的最小值。 解析: 老套路: dp[i][j]dp[i][j]dp[i][j]表示前面j个数分成i段的最小值,有dp[i][j]=min(dp[i−1][k]+(s[j]−s[k+1])2)dp[i][j]=min(dp[i-1][...

QAQ 449

dp四边形优化 Hdu 3480 Division 题解

累加器传送门:http://blog.csdn.net/NOIAu/article/details/71775000题目传送门:https://cn.vjudge.net/problem/HDU-3480dp状态转移分析博客:http://blog.csdn.net/NOIAu/article/details/72428364由于在斜率优化的博客里已经讲解了如何dp转移,这里就不在赘述,显然cost

Monica 1971

Hdu 3480 Division (DP_斜率优化|四边形不等式优化)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3480 题目大意:给定一个大小为n的集合,要求将集合分成m个子集合,每个集合都有权值,权值为最大值减最小值的平方。m 解题思路:还算简单的优化DP吧,因为一眼就能看出是DP而且需要优化。      要将集合分成m个子集合,并且权值和最小,容易想到对集合元素进行排

1723

HDU3480 Division——四边形不等式或斜率优化

题目大意 将N个数分成M部分,使每部分的最大值与最小值平方差的和最小。 思路 首先肯定要将数列排序,每部分一定是取连续的一段,于是就有了方程 $\Large f(i,j)=min(f(i-1,k-1)+(a_j-a_k)^2)$ 其中$f(i,j)$表示前$j$个数分成$i$部分的最小值 解法一.四边形不等式优化 设$w(i,j)=(a_j-a_i)^2$ 方程变为$f(i,j)=...

weixin_30363509的博客 163

HDU 3480 Division

HDU_3480 首先,一个贪心的思路就是如果将元素排个序,选择的一定是连续的区间,因为如果选了两个值,那么这个区间就可以选两个值之间的任何一个值,这样是不会改变这个区间的cost的。 如果用w[i][j]表示(a[j]-a[i])*(a[j]-a[i]),写出状态转移方程后会得到f[i][j]=min{f[i-1][k-1]+w[k,j]},这个和POJ_1160的状态转移方...

weixin_30852367的博客 80

Division HDU - 3480 区间dp 与 四边形不等式优化 或者 斜率优化

  博客目录 原题 题目传送门 Little D is really interested in the theorem of sets recently. There’s a problem that confused him a long time.    Let T be a set of integers. Let the MIN be the minimum integer in...

GreyBtfly的博客 433

Division - HDU 3480 斜率优化,四边形不等式优化

Division Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 999999/400000 K (Java/Others) Total Submission(s): 3477    Accepted Submission(s): 1346 Problem Description Little D is re

提比的强行AC 531

hdu3480 Division(四边形不等式优化dp||二维斜率优化dp)

题目链接 题目描述: 把一个大集合分成M个小集合,集合的花费是(maxnum−minnum)2(maxnum−minnum)2(maxnum-minnum)^2 求最小花费 分析: mmp,题面一定要看明白再想问题 显然,每个元素属于一个子集就够了 贪心的,我们可以把尽量相近的数字分到一个集合里 把数字排好序 有方程:f[i][j]f[i][j]f[i][j]表示前iii个数分成...

Coco_T的博客 392
上一篇: 【FJOI2007/BZOJ1002】轮状病毒 找规律+高精度
下一篇: 【SHOI2009/luogu2159】舞会 DP+容斥+高精度
CRTorlonia
博客等级 码龄9年 6粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值