hdu 3480 Division(斜率优化DP)
发布日期:2021-08-17 20:35:00 浏览次数:3 分类:技术文章

本文共 1231 字,大约阅读时间需要 4 分钟。

题目链接:

题意:

给你一个有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<j)。

这样写出来是三层for的dp,考虑用斜率优化降维。

假设l<k<j,对于dp[i][j],k到j为一个集合比l到j为一个集合更优。

则有:dp[i-1][k]+(a[j]-a[k+1])2<=dp[i-1][l]+(a[j]-a[l+1])2

整理得 dp[i-1][k]+a[k+1]2 -dp[i-1][l]+a[l+1]2 /a[k+1]-a[l-1]<=2*a[j]。

然后就是y1-y2/x1-x2<=L的斜率形式了。

1 #include
2 #define F(i,a,b) for(int i=a;i<=b;++i) 3 using namespace std; 4 5 const int N=10007; 6 7 int t,n,m,dp[2][N],Q[N],a[N],ic; 8 9 int getx(int k,int l){
return a[k+1]-a[l+1];}10 int gety(int i,int k,int l){
return dp[i][k]+a[k+1]*a[k+1]-dp[i][l]-a[l+1]*a[l+1];}11 int check(int i,int j,int k,int l){
return gety(i,j,k)*getx(k,l)<=gety(i,k,l)*getx(j,k);}12 13 int main()14 {15 scanf("%d",&t);16 while(t--)17 {18 scanf("%d%d",&n,&m);19 F(i,1,n)scanf("%d",a+i);20 sort(a+1,a+1+n);21 F(i,1,n)dp[0][i]=(a[i]-a[1])*(a[i]-a[1]);22 F(i,2,m)23 {24 int now=0,head=1,tail=0;25 Q[++tail]=i-1;26 F(j,i,n)27 {28 while(head
View Code

 

转载于:https://www.cnblogs.com/bin-gege/p/6138970.html

转载地址:https://blog.csdn.net/weixin_30867015/article/details/96617355 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Codeforces Round #433 (Div. 2) C. Planning(贪心)
下一篇:1. junit用法,before,beforeClass,after, afterClass的执行顺序

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月18日 19时49分06秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

PL/SQL数据库管理工具的使用 2019-04-27
史上最简单的spring-boot集成websocket的实现方式 2019-04-27
带你玩转属于自己的spring-boot-starter系列(一) 2019-04-27
带你玩转属于自己自己的spring-boot-starter系列(二) 2019-04-27
带你玩转属于自己的spring-boot-starter系列(三) 2019-04-27
基于SnowFlake算法如何让分库分表中不同的ID落在同一个库的算法的实现 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之分库解决方案(二) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之分表解决方案(一) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之关联查询解决方案(三) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之基于seata的分布式事务的解决方案(十五) 2019-04-27
Linux文件管理参考 2019-04-27
FTP文件管理项目(本地云)项目日报(一) 2019-04-27
FTP文件管理项目(本地云)项目日报(二) 2019-04-27
FTP文件管理项目(本地云)项目日报(三) 2019-04-27
FTP文件管理项目(本地云)项目日报(四) 2019-04-27
【C++】勉强能看的线程池详解 2019-04-27
FTP文件管理项目(本地云)项目日报(五) 2019-04-27
FTP文件管理项目(本地云)项目日报(关于不定长包的测试) 2019-04-27
FTP文件管理项目(本地云)项目日报(六) 2019-04-27
FTP文件管理项目(本地云)项目日报(七) 2019-04-27