HDU3480(斜率dp)

dp斜率优化 Hdu 3480 Division 题解 累加器传送门::http://blog.youkuaiyun.com/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;
}
【AGC】【serverless】【云函数】云函数常见问题 1、云函数添加了AUTH触发器后,在用户执行注册、销户、登录、登出动作时,云函数的event对象会自动触发返回相应信息。比如我在“层”的压缩包里放了config/config.txt,那么我在云函数里怎么调用这个文件?层的目录是:/dcache/layer,函数的目录是/dcache/layer/func。在云函数里往云数据库里插入数据返回的是180000,这是正常吗?已经按照文档在后台对应的云函数里配置了,所需的AUTH触发器。层的用法和放在函数里的用法是相同的。云函数里的层如何调用? 阅读详情

相关推荐

论文阅读笔记--Grid Anchor based Image Cropping: A New Benchmark and An Efficient Model

基于网格锚的图片裁剪:一种新的标准和高效的模型摘要1.介绍2.相关工作2.1 图像裁剪数据集和评估指标 摘要 图像裁剪的目的是通过去除图像中无关的内容来改善图像的组成和美学质量。现有的图像裁剪数据库大多只提供一个或多个人工标注的边界框作为基准,难以反映实际中图像裁剪的非唯一性和灵活性。 采用IoU等评价指标也不能可靠地反映裁剪模型的真实性能。本文回顾了图像裁剪的问题,并通过考虑图像裁剪的特殊特性和要求(如局部冗余、内容保存、高宽比),提出了基于网格锚的公式。 我们的公式将候选裁剪窗口的搜索空间从数百万减少到

qq_22565865的博客 2947

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

Mac电脑用Latex论文排版3天速成5天实战de笔记

我后悔了,这五天竞赛搞得我视力都下降了...一个冲动的决定后成为数模竞赛论文写手,3天速成+5天时间=点亮攻克latex写论文技能💡关于Overleaf我是Mac,曾经按照大部分推荐的方式用TEXshop+vs code,但是把模板导入就开始报错。跟着少之又少的适配mac的教程(此时我已知道大概是走错路了)改了配置也无效。海鲜市场找佬改了半天,佬问我:一定要用VC吗?我说,那倒也不是。于是佬推荐我overleaf,三下五除二帮我挑配了环境,美汁汁收了我30块钱。

luwanjoyce的博客 2246

【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的博客 424

滤波器初步入门(非常全面)

主要关注的是-3dB这个点,-3dB就是截止频率所对应的点,我们把功率降至50%以下的信号定义为被衰减掉了(但要跟实际情况相结合,有些信号衰减-3db不够,需要衰减更多)-3dB这个点对应我们的电压来说是0.707。设计电路可以留一定的余量,如果你把4k设计为截止频率,那么4k时候衰减倍数为-3dB通常是不够的,你可以将截止频率设为2k,那么4k的衰减就可以达到15dB(假设),根据自己的需要去设计对应的截止频率。理想的滤波器是当输入的信号频率大于截止频率时,大于部分的频率对应的电压信号直接归0。

yybyybds的博客 5715

MATLAB R2023a下载链接及软件安装教程

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。a是上半年,b是下半年版本,但是有些小弱们总是觉得只要是b一定功能多,这不一定的,同年版本b比a可能稍微全点,不同年的,比如21b,22a,肯定22a要比21b版本高功能多了。10、选择目标文件夹,默认的是C盘,想修改的话可以单击【浏览】,然后单击【下一步】

qq_53545309的博客 5154

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

解决Gradle中NPM命令失效问题

摘要:本文分析了IntelliJ IDEA中Gradle执行npm命令失败的问题,报错显示"npm"文件不存在。通过确认npm安装路径、检查系统PATH与Gradle环境的差异,提出两种解决方案:1) 在build.gradle中使用npm绝对路径;2) 通过launchctl修改用户PATH。实例展示了如何修改Gradle脚本或系统配置来解决该问题,指出跨平台开发中环境变量配置的重要性。文章为开发者提供了处理类似问题的实用方法。

2501_90323865的博客 90

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

774

37、免驱动USB双目同步测距3D活体深度检测和RV1126结合V4L开发USB摄像头使用

基本思想:需要使用双目摄像头在rv1126上进行活体检测,然后将画面实时返回到桌面上,记录一下。第二步:刷机rv1126开发板系统和ssh远程连接,见参考目录。第一步:购买可见光的红外摄像头,见参考连接,在PC端测试可用。

sxj731533730 2620

Laser-Marking 激光振镜打标机的开源代码 - 下载 - 搜珍网

为了方便开发者的使用和定制化需求,我们在这里提供激光振镜打标机的开源代码,并附带详细的描述。首先,让我们来了解一下激光振镜打标机的基本原理。振镜系统由两个可移动的反射镜组成,可以控制激光束在水平和垂直方向上的偏转角度,从而实现对工件的精确控制。通过这段开源代码,开发者可以根据自己的需求对激光振镜打标机进行二次开发和定制化。你可以修改振镜角度、打标速度等参数,也可以添加其他功能,例如自动识别和追踪等。首先,我们创建了一个串口对象,用于与激光振镜打标机进行通信。函数实现了对用户输入文本的打标操作。

TechProX的博客 1276

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

五、实战pxe安装ubuntu 22.04 软raid1(实际生产pxe配置)

这段配置文件是一个cloud-init的自动安装配置,用于自动化部署Ubuntu服务器操作系统。它定义了从系统身份、键盘布局、区域设置到磁盘分区和RAID配置的一系列设置,并且包含了在安装过程的最后阶段执行的一些命令。基础设置version: 1指定了autoinstall配置文件的版本。source定义了安装源,这里是ubuntu-server。identity设置了主机名(hostname)、用户(username)和密码(password注意这里的密码是经过加密的。键盘与语言设置。

jundao1997的专栏 999

HDU 3480 Division 斜率优化DP

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

leodestiny 699

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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的博客 225

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

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

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

冰 971

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 971

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值