HDU - 3480 Division

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 阅读详情

题目:给你n个数,将其分为m组,每组的价值定义为最大值与最小值的差值的平方,求总价值最小

思路:

首先将n个数从小到大排序。
然后设 dp[i][j]表示前j个数分成i组的最小花费。
则 dp[i][j]=min{dp[i-1][k]+(a[j]-a[k+1])^2}  0<k<j;
利用斜率优化DP,整理下就可以出来了。

代码:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<ctime>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<list>
#include<numeric>
using namespace std;
#define LL long long
#define ULL unsigned long long
#define INF 0x3f3f3f3f
#define mm(a,b) memset(a,b,sizeof(a))
#define PP puts("*********************");
template<class T> T f_abs(T a){ return a > 0 ? a : -a; }
template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
// 0x3f3f3f3f3f3f3f3f
//0x3f3f3f3f

const int maxm=5e3+5;
const int maxn=1e4+5;
int arr[maxn];
int dp[maxm][maxn];
int q[maxn];
int head,tail,n,m;
int getdp(int i,int j,int k){
    return dp[i-1][k]+(arr[j]-arr[k+1])*(arr[j]-arr[k+1]);
}
int gety(int i,int k,int j){//yj-yk
    return dp[i-1][j]+arr[j+1]*arr[j+1]-(dp[i-1][k]+arr[k+1]*arr[k+1]);
}
int getx(int k,int j){//xj-xk
    return 2*(arr[j+1]-arr[k+1]);
}
int main(){

//    freopen("D:\\input.txt","r",stdin);
//    freopen("D:\\output.txt","w",stdout);
    int T,cas=0;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            scanf("%d",&arr[i]);
        sort(arr+1,arr+n+1);
        for(int i=1;i<=n;i++)
            dp[1][i]=(arr[i]-arr[1])*(arr[i]-arr[1]);
        for(int i=2;i<=m;i++){
            head=0;
            tail=-1;
            q[++tail]=i-1;
            for(int j=i;j<=n;j++){
                while(head<tail&&gety(i,q[head],q[head+1])<=arr[j]*getx(q[head],q[head+1]))
                    head++;
                dp[i][j]=getdp(i,j,q[head]);
                while(head<tail&&gety(i,q[tail-1],q[tail])*getx(q[tail],j)>=gety(i,q[tail],j)*getx(q[tail-1],q[tail]))
                    tail--;
                q[++tail]=j;
            }
        }
        printf("Case %d: %d\n",++cas,dp[m][n]);
    }
    return 0;
}


从零到一:EHB-电机复合制动系统的Simulink仿真实战指南 本文详细介绍了EHB-电机复合制动系统在纯电动汽车中的Simulink仿真实战指南。通过系统概述、建模核心模块解析、控制策略开发及典型问题排查,帮助读者掌握从零到一的开发流程。重点讲解了液压子系统建模、电机再生制动模型及整车动力学集成,为开发者提供了一套完整的解决方案。 阅读详情

相关推荐

macOS安装Cplex+yalmip

macOS安装Cplex+yalmip

DS 4247

dp四边形优化 Hdu 3480 Division 题解

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

Monica 1972

【计算摄影】相机成像原理:从光到JPEG图像

本文我们将从最基本的相机成像原理开始论述,再讨论光线进入相机后,经过一系列处理成为JPEG图像的大致流程。

qq_35149975的博客 2万+

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

QGroundControl高级配置与自定义功能实战指南

本文深入探讨了QGroundControl(QGC)的高级配置与自定义功能,为无人机开发者、系统集成商和高级用户提供实战指南。内容涵盖从品牌界面定制、自定义MAVLink消息处理,到插件开发与自动化部署的全流程,旨在帮助用户解锁QGC的隐藏潜力,打造专属的行业解决方案。

weixin_29234509的博客 239

【线粒体基因组数据提交实战】从注释校验到GenBank批量入库的避坑指南

本文详细介绍了线粒体基因组数据从注释校验到GenBank批量上传的全流程避坑指南。重点解析了GB2sequin工具的正确使用方法、TBL注释文件的精修技巧,以及BankIt平台提交的隐藏要点,帮助科研人员高效完成NCBI数据提交,特别适合需要批量上传线粒体基因组数据的研究者。

weixin_28726671的博客 440

HDU 4301 Divide Chocolate DP

题目链接~http://acm.hdu.edu.cn/showproblem.php?pid=4301 非原创,看了好几个大神的题解,才看懂 代码::刚开始看bin神的,看了半天没看懂,我太菜了%>_<% 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; ...

weixin_33928467的博客 144

Clarity 3D Layout

Clarity 3D Layout Clarity 3D layout是3D 全波电磁场模型提取工具,它可以导入已经设计好的PCB文件也可以直接在Clarity 3D layout创建版图进行3D 全波电磁场模型提取。

m0_53280471的博客 5476

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

在Simulink中实现一个基于SiC MOSFET的高效率电机驱动系统

本文介绍了在Simulink中构建基于SiC MOSFET的高效率电机驱动系统的详细流程。系统由直流电源模块、SiC MOSFET逆变器模块、PMSM电机模型、控制策略模块(包括矢量控制和PWM生成)以及反馈测量模块组成。文章逐步指导了从模型创建到参数设置的完整过程,包括各模块的具体实现方法。通过仿真可以评估系统在不同负载条件下的响应速度、效率、功率密度等性能指标。该建模方法为电机驱动系统的设计和优化提供了有效工具,同时建议根据实际硬件规格和工程需求进行参数调整和定制化开发。

xiaoheshang_123的博客 248

【技能】OpenClaw Skills学习及手搓一个极简skill

本文介绍了OpenClaw Skills的基础概念与使用方法。Skills是OpenClaw代理使用工具的核心载体,通过SKILL.md文件定义技能属性和执行方式。技能加载遵循"工作区>本地>内置>自定义目录"的优先级规则。用户可通过ClawHub一键安装现成技能,也可自定义开发技能:创建技能目录,编写包含YAML元数据和执行指令的SKILL.md文件,放置于工作区skills目录进行测试。文章还介绍了多代理场景下的技能共享、插件集成以及安全注意事项,包括沙箱使用和敏感

海兰 3974

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

【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果(附项目源码)

本文介绍了Unity中实现传送门效果的完整流程。通过第一人称角色控制器实现移动,使用PortalView脚本和自定义Unlit Shader渲染门内场景,巧妙利用相机位置和旋转同步实现动态视角。重点解决了近裁剪面问题,确保远距离渲染正确性。最后通过PortalTeleporter脚本实现传送功能,检测碰撞并计算相对位置进行瞬移。该方法无需复杂插件,代码简洁高效,适用于各类3D场景中的传送门实现。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

HDU - 3480 Division

HDU - 3480 思路: 平行四边形不等式优化dp 同上一篇博客,用滚动数组优化 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define y1 y11 #d...

weixin_33881041的博客 140

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

HDU 3480 Division 题解

Hdu 3480

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

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

HDU 3480 Division【区间DP+四边形不等式优化】

题意:将含有n个元素的一个集合分成m个子集,定义一个子集的价值为:最大值与最小值差的平方,求m个子集的最小和. 记录: 四边形不等式优化:还不是很懂这个。。。目前总结的话,遇到区间DP,先弄一个O(n3)O(n^3)O(n3),然后如果不可行,就直接放for(intk=s[i][j−1];k&amp;amp;lt;=s[i+1][j];++k)for(int k = s[i][j - 1]; k &amp;amp...

王小二的博客 336

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

Division HDU 3480 斜率优化dp,推出式子就解了 1.代价是(Max{T}-Min{T})^2,要使权值和最小,应该从小到大排序,然后按顺序取。 2.排完序后可以DP了。定义dp[i][j]:前i个数分成不超过j段的最小代价。 dp状态转移式 dp[i][j]=min{dp[i][j-1],dp[k][j-1]+(A[i]-A[k+1])^2} 3.斜率优化...

WhiteAndGold的博客 276

HDU 3480 Division 斜率优化DP

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

leodestiny 699

【HDU】3480 Division

http://acm.hdu.edu.cn/showproblem.php?pid=3480 题意:一个n个元素的集合S要求分成m个子集且子集并为S,要求$\sum_{S_i} (MAX-MIN)^2$最小。(n<=10000, m<=5000) #include <cstdio> #include <cstring> #include &...

93

hdu 3480 Division

http://acm.hdu.edu.cn/showproblem.php?pid=3480 这个题目的数据范围确实有点大,1000*5000,即使n*m的时间复查度也让人有点不敢做 思路: 排序,斜率优化即可 #include #include #include #include using namespace std; const int maxn=10010; con

态度决定高度 684

HDU 3480 Division

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 i

jjs98 821

[HDU3480] Division

定义状态 写转移方程 作差得不等式 码代码   不要用double类型的函数搞斜率 我直接T了 而且还可能出现精度问题  这道题被坑的原因是 : 忘记预处理 一直坑的原因是 网上有一份神犇题解 我确实不懂他的队尾维护 其实一般的维护方法就可以了= = 如果你们想研究就拿去看看吧  http://blog.sina.com.cn/s/blog_6e63f59e0101aeaf.html

shiyukun1998的专栏 565
上一篇: HDU - 3045 Picnic Cows
下一篇: HDU - 2829 Lawrence
我不会额
博客等级 码龄11年 2粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值