HDU3480(斜率dp)

dp斜率优化 Hdu 3480 Division 题解 累加器传送门::http://blog.csdn.net/NOIAu/article/details/71775000题目传送门:https://vjudge.net/problem/HDU-3480题目:Little D is really interested in the theorem of sets recently. There’s a problem that confused him 阅读详情

Problem Description
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 T and MAX be the maximum, then the cost of set T if defined as (MAX – MIN)^2. Now given an integer set S, we want to find out M subsets S1, S2, …, SM of S, such that

这里写图片描述

Input
The input contains multiple test cases.
In the first line of the input there’s an integer T which is the number of test cases. Then the description of T test cases will be given.
For any test case, the first line contains two integers N (≤ 10,000) and M (≤ 5,000). N is the number of elements in S (may be duplicated). M is the number of subsets that we want to get. In the next line, there will be N integers giving set S.

Output
For each test case, output one line containing exactly one integer, the minimal total cost. Take a look at the sample output for format.

Sample Input
2
3 2
1 2 4
4 2
4 7 10 1

Sample Output
Case 1: 1
Case 2: 18

题目大意
将含有N个元素的一个集合分成M个子集,使得每个子集的最大值与最小值的平方差的和最小
思路:很明显要先排序,排序完之后感觉就像是hdu2829
设 dp[i][j]表示前i个数分成j组的最小花费。
所以转移方程就是dp[i][j]=min{dp[k][j-1]+(num[i]-num[k+1])*(num[i]-num[k+1])}
然后斜率优化即可
AC代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 10010;
int num[maxn];
int dp[maxn][5005];
int N,M,head,tail;
int que[maxn];
int getfz(int i,int j,int k)
{
  return dp[i][k]-dp[j][k]+num[i+1]*num[i+1]-num[j+1]*num[j+1];
}
int getfm(int i,int j)
{
  return num[i+1]-num[j+1];
}
int main()
{
  int T,ncase=1;
  scanf("%d",&T);
  while(T--)
  {
    scanf("%d%d",&N,&M);
    for(int i=1;i<=N;i++)scanf("%d",&num[i]);
    sort(num+1,num+N+1);

    for(int i=1;i<=N;i++)dp[i][1]=(num[i]-num[1])*(num[i]-num[1]);
    for(int j=2;j<=M;j++)
    {
      head=tail=0;
      que[tail++]=j-1;
      for(int i=j;i<=N;i++)
      {
        while(head+1<tail&&getfz(que[head+1],que[head],j-1)<=2*num[i]*getfm(que[head+1],que[head]))head++;
        dp[i][j]=dp[que[head]][j-1]+(num[i]-num[que[head]+1])*(num[i]-num[que[head]+1]);
        while(head+1<tail&&getfz(i,que[tail-1],j-1)*getfm(que[tail-1],que[tail-2])<=getfz(que[tail-1],que[tail-2],j-1)*getfm(i,que[tail-1]))tail--;
        que[tail++]=i;
      }
    }
    printf("Case %d: %d\n",ncase++,dp[N][M]);
  }
  return 0;
}
微波射频学习笔记18-------偶极子天线和微波天线设计介绍 几种天线设计方法的介绍 一、偶极子天线 1.天线模型 两根紧挨着的金属导体,长度均为四分之一波长,直径均远小于波长,两导体间距也远小于波长。 2.天线性能的设计因素 ① 单个导体长度L:(光速/频率)/4=四分之一波长(在空气中传播的波长),但在导体中传播,波长会变短; ② 导体半径R:远小于波长即可,使用导电率高些的材料,市面上常见直径零点几毫米就挺好,或者用波长/200,得出一个小200的值,也算远小于波长; ③ 两导体间距S:远小于波长即可,可以比半径更小点。 以上三个变量L、R、S,均可在仿真软件 阅读详情

相关推荐

Type-C转DP1.4转C双向互传转接线方案

Type-C转DP双向互转方案的核心在于利用Type-C接口中的Alt Mode(交替模式)功能。通过利用Type-C接口的Alt Mode功能,该方案实现了Type-C接口与DP接口之间的双向互传,极大地丰富了用户的视觉体验。在选择Type-C转DP双向互转方案时,用户需要关注兼容性、性能需求、线缆长度和品牌等因素,以确保获得最佳的传输质量和使用体验。因此,Type-C转DP双向互转方案应运而生,旨在实现Type-C接口与DP接口之间的无缝连接,满足用户对高效能和高清晰度视频传输的需求。

m0_70875024的博客 4964

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

原题走这里 首先很容易想到给原数组排序,于是最大值和最小值就变成最左和最右。明显是选取连续的区间最优,于是原问题就转化为了区间DP,设前iii个中选取jjj个区间的最优解为d[i][j]d[i][j]d[i][j],转移方程: d[i][j]=min(d[i−1][k]+(s[j]−s[k])2)d[i][j]=min(d[i−1][k]+(s[j]−s[k])2)d[i][j]=min(d[...

CRTorlonia的博客 422

医学影像分割入门:为什么U-Net至今仍是肝脏CT肿瘤分割的‘首选’?

本文探讨了U-Net在肝脏CT肿瘤分割中的持久优势,分析了其轻量化设计、对称架构和跳跃连接如何完美适配医学影像的小样本、高精度需求。通过对比实验和实战建议,揭示了U-Net在肝脏肿瘤分割任务中超越新模型的根本原因,并提供了PyTorch实现和部署技巧。

weixin_38166931的博客 514

HDU 3480 Division 斜率DP

Division HDU - 3480 令 TTT 表示一个整数的集合,MIN,MAXMIN,MAXMIN,MAX 分别是这个集合中最小和最大的数,定义这个集合的花费为 (MAX−MIN)2(MAX-MIN)^2(MAX−MIN)2。 先给定一个整数集合 SSS,希望找到 MMM 个 SSS 的子集 S1,S2,⋯SMS_1,S_2,\cdots S_MS1​,S2​,⋯SM​,使得 S1∪S2∪...

wineandchord 270

在thinkBook16的win11基础上安装ubuntu22.04

背景:联想ThinkBook16 pro 32G/512G,系统盘已安装Win11,加装一条M.2-2T固态,想在2T上分一个300GB的EXT4分区,然后把ubuntu22.04安装在该分区上,并实现Win11+Linux多系统共存。 目标:实现多磁盘下分区管理的简化,优化掉一些不必要的多余的维护性质的分区。

QzmAIoT 3994

快乐8 Ai大模型XGBoost LightGBM预测系统

随机森林回归:通过集成多个决策树模型,提高预测的准确性和稳定性。XGBoost:一种基于梯度提升的强大模型,擅长处理结构化数据。LightGBM:一种高效的基于决策树算法的分布式梯度提升框架,具有快速的训练速度和低内存消耗。高预测准确率:通过集成多种模型,提供更为精准的预测结果。多种预测方法:支持同尾号、重号、温号、连号和综合预测等多种预测策略,满足不同用户的需求。实时日志:在预测过程中,用户可以实时查看系统的预测进度和结果。

m0_72636583的博客 1万+

斜率优化 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

海康工业相机LabVIEW二次开发实战——参数配置优化与图像高效存储

本文详细介绍了海康工业相机在LabVIEW平台上的二次开发实战,重点解析了相机参数配置的优化方法与图像高效存储策略。通过剖析曝光、增益、触发模式等核心参数的设置逻辑,并结合生产者-消费者设计模式,指导开发者构建稳定、高效的图像采集与异步存储流程,有效提升工业视觉项目的开发效率与系统稳定性。

weixin_29306317的博客 213

斜率优化 hdu3480 pku3709 pku1180 pku2180

斜率优化是DP优化的一种,假设状态转移方程为dp[i]=min or max (dp[k]+w[i,k]),我们假设取其中两个解k1,k2(不妨设k1       但是对i的单调性是建立在k1f[ii]时,G(k2,k3)也会>f[ii],此时k3会比k2优.所以此时可以把k2去掉,去掉后G(k1,k2)会保持单调递减,所以把此时的f[ii]插入到G(k1,k2)中,前面的G(k1,k2)都

773

Linux中断子系统(二)—— 通用框架处理

1、数据结构分析 (1)中断描述符结构structirq_desc: 1)打开CONFIG_SPARSE_IRQ宏(中断编号不连续),中断描述符以radix- tree来组织,用户在初始化时进行动态分配,然后再插入radix-tree中; 2)关闭CONFIG_SPARSE_IRQ宏(中断编号连续),中断描述符以数组的 形式组织,并且已经分配好; 3)不管哪种形式,最终都可以通过linuxirq号来找到对应的中断描述符; (2)stru...

weixin_38428439的博客 4868

保姆级教程:在阿里云ECS上用Docker一键部署EMQX MQTT服务器(Ubuntu 20.04)

本文提供在阿里云ECS上使用Docker一键部署EMQX MQTT服务器的详细教程,涵盖从实例创建、Docker环境配置到EMQX部署与优化的全流程。适合物联网开发者快速搭建高效、安全的MQTT消息服务器,适用于智能家居、工业物联网等场景。

weixin_28739079的博客 299

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

手把手教你完成YOLOv11 PySide6目标检测界面搭建,使用Qt6设计YOLOv11检测系统,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。YOLO系列模型由于其高效的检测速度和较高的准确率,成为目标检测任务的首选算法之一。本项目结合 YOLOv11 与 PySide6,构建了一个图形化界面,便于用户进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测,不仅可以用于大论文的工作量展示,还可以作为毕业设计。系统功能有:目标检测程序实现图片/视频/摄像头检测,AI 问答界面(deepseek大模型接口,流式输出)、退出登录、界面保存登录状态、个人信息修改等

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 7003

HDU 3480 Division 斜率优化DP

题意:现在有N个元素的集合S。把集合S划分成M个子集,每个子集的花费为集合中最大和最小元素的差的平方。 求如何划分,才能总的代价最小。 思路:首先要注意到,因为集合中的元素具有无序性,我们只需知道集合中最大和最小的元素就能算出代价,也能把集合划分出来。 所以,我们把所有元素进行排序,这样,最小的元素和最大的元素的位置就是已知的了。 定义:dp[i][j]将前j个元素划分成i个子集得到的最小花

leodestiny 697

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

HDU 3480 Division (斜率DP)

HDU 3480 Division (斜率DP) ACM 题目地址:  HDU 3480 Division 题意:  给定一个大小为n的集合,要求将集合分成m个子集合,每个集合都有权值,权值为最大值减最小值的平方。 分析:  from ZeroClock: dp[i][j+1] = min{dp[k][j] + (arr[i] - arr[k+1]) ^2} =

水果君の日常 1400

STM32F407中文手册

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

HDU 3480 Division DP斜率优化

解题思路 第一步显然是将原数组排序嘛……然后分成一些不相交的子集,这样显然最小。重点是怎么分。 首先,我们写出一个最暴力的\(DP\): 我们令$F[ i ][ j ] $ 为到第\(i\)位,分成\(j\)组的代价,我们可以写出如下 $ DP$ for( LL i = 1; i <= N; ++i ) F[ i ][ 1 ] = sqr( A[ i ] - A[ 1 ] ); f...

TIANFENG_123456的博客 249

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

hdu 3480 Division 斜率优化DP

Division Time Limit: 10000/5000 MS (Java/Others)Memory Limit: 999999/400000 K (Java/Others)Total Submission(s): 5883Accepted Submission(s): 2337 Problem Description Little D is really ...

YZ930035683的博客 224

hdu3480之二维斜率优化DP

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

Stephen 2011

HDU3480 Division —— 斜率优化DP

题目链接:https://vjudge.net/problem/HDU-3480 Division Time Limit: 10000/5000 MS (Java/Others)Memory Limit: 999999/400000 K (Java/Others)Total Submission(s): 5304Accepted Submission(s): 2...

alince20008的博客 252

HDU 3480 斜率优化DP

题目链接终于完全靠自己过掉了一道基础的斜率优化DPDP的思路很直接,一开始看数据范围,还以为不用优化可能卡过去,然后就直接写了三重循环DP,果然超时没商量= = for(int i=1 ;i<=n ;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); for(int i=1 ;i<=n ;i++){ for(int

新熊君的博客 580

hdu 3480 斜率dp

思路:很普通的斜率dp #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define Maxn 10010 #define LL int using namespace std; LL dp[Maxn][2],num[Maxn];...

weixin_30868855的博客 79

hdu3480 斜率优化dp

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

习惯与规则决定命运 958

hdu 2829 Lawrence, hdu 3045 Picnic Cows,hdu 3480 Division , 斜率dp

斜率dp的几题. hdu2829 //#pragma warning (disable: 4786) //#pragma comment (linker, "/STACK:16777216") //HEAD #include #include #include #include #include #include #include #include #include #i

冰 970

HDU 3480 DP+斜率优化

题意:给你n个数字,然后叫你从这些数字中选出m堆,使得每一堆的总和最小,一堆的总和就是这一堆中最大值减去最小值的平方,最后要使得所有堆加起来的总和最小。 思路:对这些数字排序之后,很容易想到DP解法,用dp[i][j]表示数字i现在在第j堆,那么转移方程就是dp[i][j] = min(dp[i][j] , dp[k][j - 1] + (a[i] - a[k + 1]) ^ 2)。因为已经排序

just_water 970

hdu 3480 Division(斜率优化DP)

题目链接:hdu 3480 Division 题意: 给你一个有n个数的集合S,现在让你选出m个子集合,使这m个子集合并起来为S,并且每个集合的(max-min)2 之和要最小。 题解: 运用贪心的思想,肯定首先将全部的数排好序,然后设dp[i][j]表示前j个数分为i个集合的最优解。 则有dp[i][j]=min{dp[i-1][k]+(a[j]-a[k+1])2}(0<k&lt...

weixin_30867015的博客 146

HDU-3480 Division 【DP+斜率优化(二维)】

题目链接 题意 定义一个集合的花费是这个集合中的最大值减最小值的平方。然后给定一个集合S,求对这个集合的一个覆盖,使得所有子集的花费和最小。 分析 本身这个题是非常简单的,只是今天看了别人的题解,我发现我以前写的二维斜率优化都写复杂了。直接外层循环用未被优化的那一维就行了,不用像我以前那样维护一个k维的单调队列……我说怎么不对劲,每次看别人的代码都那么...

a18235146924的博客 170
上一篇: 2018CCPC湘潭邀请赛总结
下一篇: 交通银行金融科技后端开发实习生面试经验
T__TSZ
博客等级 码龄10年 2粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值