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 ...
随机推荐
- 关于Git中的一些常用的命令
深入了解git的checkout命令 检出命令(git checkout)是Git最常用的命令之一,同时也是一个很危险的命令. 因为这条命令会重写工作区.检出命令的用法如下: 用法一: git che ...
- Matlab plotyy函数的使用及问题总结
MATLAB函数,用来绘制双纵坐标图. 调用格式: 1.plotyy(X1,Y1,X2,Y2):以左.右不同纵轴绘制X1-Y1.X2-Y2两条曲线. 2.plotyy(X1,Y1,X2,Y2,FUN1 ...
- Guzzle Unable to parse JSON data: JSON_ERROR_SYNTAX - Syntax error, malformed JSON
项目更新到正式平台时,出现Guzzle(5.3) client get请求出现:Unable to parse JSON data: JSON_ERROR_SYNTAX - Syntax error, ...
- JAXB - The JAXB Context
As we have seen, an object of the class JAXBContext must be constructed as a starting point for othe ...
- Spring之IOC容器初始化过程
Ioc容器的初始化是由refresh()方法来启动的,这个方法标志着Ioc容器的正式启动. 具体来说这个启动过程包括三个基本过程: 1.BeanDifinition的Resource定位 2.Bean ...
- JNI的一些使用
1.简介 Java Native Interface(JNI) 有时候我们必须要调用本地代码c/c++来克服java中的内存管理和性能限制.java支持通过Java Native Interface( ...
- MFC多视图共用一文档实现
项目过程中有定制视图的需求,具体为打开程序默认双视图并且共用一个文档.在网上找了许多类似的资料,都不尽完善.本文直接从达到目的的角度叙述,实现原理不再多说. 1.在自己的App类中定义public变量 ...
- UITabBar - 深度解剖
for (UIView *tabbarbutton in self.subviews) { // NSLog(@"%@",tabbarbutton); ...
- CentOS配置java运行环境
CentOS_配置_docker CentOS_6.5 1.CentOS_6.5在安装docker-io之前需要首先卸载docker包(没下载过可以省略) $ sudo yum -y remove d ...
- 09_httpclient测试SOAP协议
[工程截图]注意:无需使用Wsimport生成客户端代码 [HttpClient.java] import java.io.ByteArrayOutputStream; import java.io. ...