题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3480

题目大意:将n个数字分成m段,每段价值为(该段最大值-该段最小值)^2,求最小的总价值。

解题思路:很单纯的斜率优化DP,得出状态转移方程:dp[i][j]=min{dp[k][j-1]+(a[i]-a[k+1])^2}(j-1<=k<i),然后斜率优化降到O(n^2)就好了。

     注意:数据类型建议用int,不要用long long,后者乘法计算时间是前者的四倍,否则C++可能会超时。

代码:

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 using namespace std;
 6 typedef long long LL;
 7 const int N=1e4+5;
 8
 9 int head,tail;
10 int dp[N][5005],a[N],q[N];
11
12 int getUP(int m,int k,int j){
13     return dp[k][j-1]+a[k+1]*a[k+1]-dp[m][j-1]-a[m+1]*a[m+1];
14 }
15
16 int getDOWN(int m,int k){
17     return 2*(a[k+1]-a[m+1]);
18 }
19
20 //dp[i][j]=min{dp[k][j-1]+(a[i]-a[k+1])^2}
21 int getDP(int i,int j,int k){
22     return dp[k][j-1]+(a[i]-a[k+1])*(a[i]-a[k+1]);
23 }
24
25 int main(){
26     int t,cas=0;
27     scanf("%d",&t);
28     int cnt=0;
29     while(t--){
30         int n,m;
31         scanf("%d%d",&n,&m);
32         for(int i=1;i<=n;i++){
33             scanf("%d",&a[i]);
34         }
35         sort(a+1,a+1+n);
36         for(int i=1;i<=n;i++){
37             dp[i][1]=(a[i]-a[1])*(a[i]-a[1]);
38         }
39
40         for(int j=2;j<=m;j++){
41             head=tail=0;
42             q[tail++]=j-1;
43             for(int i=j;i<=n;i++){
44                 cnt++;
45                 while(head+1<tail&&getUP(q[head],q[head+1],j)<=a[i]*getDOWN(q[head],q[head+1])){
46                     head++;
47                 }
48                 dp[i][j]=getDP(i,j,q[head]);
49                 while(head+1<tail&&getUP(q[tail-1],i,j)*getDOWN(q[tail-2],q[tail-1])<=getUP(q[tail-2],q[tail-1],j)*getDOWN(q[tail-1],i)){
50                     tail--;
51                 }
52                 q[tail++]=i;
53             }
54         }
55         printf("Case %d: %d\n",++cas,dp[n][m]);
56     }
57     return 0;
58 }

转载于:https://www.cnblogs.com/fu3638/p/7850650.html

HDU 3480 Division(斜率DP裸题)相关推荐

  1. HDU 2196 Computer 树形DP经典题

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...

  2. hdu 3480 斜率dp

    思路:很普通的斜率dp #include<cstdio> #include<cstring> #include<iostream> #include<algo ...

  3. 【POJ - 3624 】Charm Bracelet (dp,0-1背包裸题)

    题干: Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to ...

  4. HDU 3669 Cross the Wall(斜率DP+预处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3669 题目大意:有n(n<=50000)个矩形,每个矩形都有高和宽,你可以在墙上最多挖k个洞使得 ...

  5. 【HDU - 1102】Constructing Roads (最小生成树裸题模板)

    题干: There are N villages, which are numbered from 1 to N, and you should build some roads such that ...

  6. HDU 5755 Gambler Bo(高斯消元裸题)——2016 Multi-University Training Contest 3

    传送门 Gambler Bo Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  7. hdu 6899 Xor 数位dp

    传送门 文章目录 题意: 思路: 题意: 问你有多少对x,yx,yx,y满足以下条件: (1)x∈[0,A],y∈[0,B](1)x \in [0,A],y\in [0,B](1)x∈[0,A],y∈ ...

  8. [SCU 4509] Snowdrop修长廊 (斜率DP)

    SCU - 4509 使用若干条线段,覆盖坐标轴上的 N个点 覆盖 [i,j][i, j]的代价为cost(i,j)=W+(xi−xj)2cost(i,j) = W + (x_i-x_j)^2 求覆盖 ...

  9. 【CodeVS - 3639】(树的重心模板,裸题)

    题干: 题目描述 Description 给出一棵树,求出树的中心. 为了定义树的中心,首先给每个结点进行标号.对于一个结点K,如果把K从树中删除(连同与它相连的边一起),剩下的被分成了很多块,每一块 ...

  10. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

最新文章

  1. Power Designer使用技巧
  2. 网站新手引导/步骤引导
  3. iOS 不要用文本编辑pod file
  4. 小明分享|nRF52840 蓝牙模块连接测试
  5. 欢乐纪中某A组赛【2019.7.9】
  6. spring boot的学习(1)杂
  7. [serial]基于select/poll/epoll的串口操作
  8. 66.为什么有时候在ISE软件中,顶层文件不能置顶?
  9. 【数论思维题】Enlarge GCD【Codeforces Round #511 (Div. 2)】
  10. 计算机控制系统烤箱温度控制,图说恒温烘箱温度控制系统的设计分析
  11. 冯扬文:基于数据仓库的集装箱运价信息集成研究
  12. 结果公示!400名博硕士获“优秀学位论文”奖!
  13. python文件查重_使用Python查找目录中的重复文件
  14. vue之表格数据渲染,实现点击表格某列按钮弹出框显示剩余数据(模态框知识点)
  15. 产品读书《数字化生存》
  16. 百度云和ai开放平台关系_集成平台即服务,云和……独角兽
  17. ATFX:美国服务业持续收缩,科技股前景如何?
  18. R语言 CART算法和C4.5算法(决策树)
  19. awd——waf部署
  20. 牛客第八场_E-Enigmatic Partition(神仙差分)

热门文章

  1. Linux文件的三种特殊权限SUID、SGID、STICKY
  2. Linux安装最新版Mono,Jexus(截至2015年12月30日)
  3. Linux突然断电后文件丢失的问题
  4. 这首歌,竟然是AI生成的,太狠了...
  5. RabbitMQ 中的 7 种队列模式,写得太好了!
  6. 牛逼!它比传统数据库快 100-1000,真不相信?
  7. 2019最新资料!共7T
  8. 如何准备Java初级和高级的技术面试
  9. 编程零基础,如何学 Python ?
  10. 黑客攻击「宝贝回家寻子网」致数据丢失:丧尽天良