hdu 3480
斜率dp
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define maxn 10005
#define maxm 5005
using namespace std;
int dp[maxn][maxm];
int q[maxn*];
int num[maxn]; bool check(int j,int tail,int i)
{
int yk=dp[q[tail-]][j-]+num[q[tail-]+]*num[q[tail-]+];
int yj=dp[q[tail]][j-]+num[q[tail]+]*num[q[tail]+];
int yi=dp[i][j-]+num[i+]*num[i+];
int xk=*num[q[tail-]+];
int xj=*num[q[tail]+];
int xi=*num[i+];
if((yi-yk)*(xj-xk)<=(yj-yk)*(xi-xk))return ;
return ;
} bool get(int head,int j,int i)
{
int y1=dp[q[head]][j-]+num[q[head]+]*num[q[head]+];
int y2=dp[q[head+]][j-]+num[q[head+]+]*num[q[head+]+];
int x1=num[q[head]+];
int x2=num[q[head+]+];
if((y2-y1)<=*num[i]*(x2-x1))return ;
return ;
} int main()
{
int n,m,t;
int ca=;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&num[i]);
sort(num+,num+n+);
int tail,head;
for(int i=;i<=n;i++)
dp[i][]=(num[i]-num[])*(num[i]-num[]);
for(int j=;j<=m;j++)
{
head=tail=;
q[++tail]=j-;
for(int i=j;i<=n;i++)
{
while(tail-head>&&check(j,tail,i))tail--;
q[++tail]=i;
while(tail-head>&&get(head+,j,i))head++;
int best=q[head+];
dp[i][j]=dp[best][j-]+(num[i]-num[best+])*(num[i]-num[best+]); }
}
printf("Case %d: %d\n",ca++,dp[n][m]);
}
return ;
}
四边形不等式优化:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 10005
#define maxm 5005
#define inf 99999999
using namespace std; int dp[maxn][maxm];
int s[maxn][maxm];
int num[maxn]; int main()
{
int n,m;
int t,ca=;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++)
scanf("%d",&num[i]);
sort(num+,num++n);
dp[][]=;
for(int i=; i<=n; i++)
{
dp[i][]=(num[i]-num[])*(num[i]-num[]);
}
for(int j=; j<=m; j++)
{
s[n+][j]=n-;
for(int i=n; i>=j; i--)
{
dp[i][j]=inf;
for(int k=s[i][j-]; k<=s[i+][j]; k++)
{
int tmp=dp[k][j-]+(num[i]-num[k+])*(num[i]-num[k+]);
if(dp[i][j]>tmp)
{
s[i][j]=k;
dp[i][j]=tmp;
}
}
}
}
printf("Case %d: %d\n",ca++,dp[n][m]);
}
return ;
}
hdu 3480的更多相关文章
- hdu 3480 Division(斜率优化DP)
题目链接:hdu 3480 Division 题意: 给你一个有n个数的集合S,现在让你选出m个子集合,使这m个子集合并起来为S,并且每个集合的(max-min)2 之和要最小. 题解: 运用贪心的思 ...
- HDU 3480 - Division - [斜率DP]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3480 Time Limit: 10000/5000 MS (Java/Others) Memory L ...
- HDU 3480 Division(斜率DP裸题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3480 题目大意:将n个数字分成m段,每段价值为(该段最大值-该段最小值)^2,求最小的总价值. 解题思 ...
- HDU 3480 division
题目大意:一个有n个数的集合,现在要求将他分成m+1个子集,对子集i设si表示该集合中最大数与最小数的差的平方.求所有si的和的最小值.n<=10000,m<=5000. 分析:最优解的m ...
- HDU 3480 Division(斜率优化+二维DP)
Division Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 999999/400000 K (Java/Others) Tota ...
- HDU 3480 DP+斜率优化
题意:给你n个数字,然后叫你从这些数字中选出m堆,使得每一堆的总和最小,一堆的总和就是这一堆中最大值减去最小值的平方,最后要使得所有堆加起来的总和最小. 思路:对这些数字排序之后,很容易想到DP解法, ...
- hdu 3480 Division(四边形不等式优化)
Problem Description Little D is really interested in the theorem of sets recently. There’s a problem ...
- HDU 3480 斜率dp
Division Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 999999/400000 K (Java/Others)Total ...
- HDU 3480 DP 斜率优化 Division
把n个数分成m段,每段的值为(MAX - MIN)2,求所能划分得到的最小值. 依然是先从小到大排个序,定义状态d(j, i)表示把前i个数划分成j段,所得到的最小值,则有状态转移方程: d(j, i ...
随机推荐
- 关于JFace中的右键菜单Action类,ActgionGroup类,MenuManager类
Action类,ActionGroup类,MenuManager类介绍 SWT中菜单是Menu类,在前面章节中已经介绍过Menu类的使用. 菜单项用MeauItem类来实现.但是在实际开发中,同一种功 ...
- 关于文件的复制(用InputStream和OutputStream)
作业:将c盘的一个文本文件复制到d盘. 分析:复制原理:读取c盘文件中的数据,将这些数据写入到d盘当中,连读带写. /* * 需求:作业:将c盘的一个文本文件复制到d盘. * 思路: * 1,需要读取 ...
- win7 Sendto修改
sendto目录现在被移到了这里 %APPDATA%\Microsoft\Windows\SendTo %APPDATA%是个环境变量,具体来说是在这里: C:\users\<username& ...
- Java8的新特性
Java 8主要新特性包括如下几点: 一.接口的默认方法和静态方法 Java 8版之前,接口只有抽象方法,而在Java 8,为接口新增了两种类型的方法. 第一种是默认方法:在Java 8中,可 ...
- JavaScript高级程序设计(第三版)学习笔记22、24、25章
第22章,高级技巧 高级函数 安全的类型检测 typeof会出现无法预知的行为 instanceof在多个全局作用域中并不能正确工作 调用Object原生的toString方法,会返回[Object ...
- 第六章 jQuery操作表单
1.单行文本框的应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- RabbitMQ 原文译1.1--HelloWord
本系列文章均来自官网原文,属于个人翻译,如有雷同,权当个人归档,忽喷. RabitMQ 是一个消息中间件,其实就是从消息生产者那里接受消息,然后发送给消息消费者.在这个传输过程中,可以定义一些缓存,持 ...
- Delphi推出Delphi XE4支持IOS开发
Delphi 新推出 Delphi XE4 ,这是一个支持 iOS 应用开发的新版本.Delphi XE4 带来 Embarcadero 全新的 ARM 编译器 下载地址
- system.badimageformatexception 未能加载文件或程序集
今天在调用dll文件的时候发现这样一个错误. system.badimageformatexception 未能加载文件或程序集. 发现项目CPU默认Any CPU,我的系统是X64,将 ...
- java web 优化札记
1.效果最明显最简单最省事的优化是SSD,一般优化效率3倍起,(未必对,但是说明很多瓶颈问题都是存储问题) 2.垂直扩容省了开发时间,短期来看是最快的,缺点是会消耗更多的资源,而且有瓶颈,另外如果应用 ...