#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<stack>

#define MAXN 1005

using namespace std;

unsigned long long  f[MAXN][MAXN],w[MAXN];

int num[MAXN];

#define FZ(i,p)(f[i-1][p]+num[p+1]*num[p+1])

int i,p;

int que[MAXN],tail,head;

int n,m,j;

bool turnup(int i,int p1,int p2,int p3) //p1>p2>p3

{

    unsigned long long y1=FZ(i,p1),x1=num[p1],y2=FZ(i,p2), x2=num[p2], y3=FZ(i,p3), x3=num[p3];

    if((x2-x3)*(y1-y2)>(x1-x2)*(y2-y3))return 1;

    else return 0;

}int ii,nn;

int main()

{   scanf("%d",&nn);

    for(ii=1;ii<=nn;ii++)

    {

    scanf("%d%d",&n,&m);

     

    for(int i=1;i<=n;i++)

    {

        scanf("%d",&num[i]);

    }

    sort(num+1,num+n+1);

    for(i=1;i<=n;i++)

      f[0][i]=(num[i]-num[1])*(num[i]-num[1]);

 

    for(int i=1;i<=m;i++){

        head=tail=1;

        que[tail++]=0;

 

  for(int j=1;j<=n;j++){

        while(head<tail-1&&FZ(i,que[head+1])-FZ(i,que[head])<2*num[j]*(num[que[head+1]]-num[que[head]]))

            head++;

    int k=que[head];

    f[i][j]=f[i-1][k]+(num[j]-num[k+1])*(num[j]-num[k+1]);

    while(head<tail-1&&turnup(i,j,que[tail-1],que[tail-2])==0)

    tail--;

    que[tail++]=j;

    }

    }

    printf("%I64d\n",f[m][n]);

    }

}

  

fdssd的更多相关文章

  1. HTML5标签选择,图文混排使用dl dt dd

    图文混排,可以使用 dl dt dd(dd 和 dt 是同级,不可以嵌套,没有先后顺序) 1,上面红色部分是标题,可以使用h1里面包含一个span标签,样式一样,所以两个可以一起写. 2,上面黑色部分 ...

  2. C#基础学习(二)

    ---恢复内容开始--- 面向对象 (类是不占内存,实例占内存) C#与python不用可以直接从另一个文件直接实例化一个类,不需要导包:                                ...

随机推荐

  1. Codeforces Round #622 (Div. 2).C2 - Skyscrapers (hard version)

    第二次写题解,请多多指教! http://codeforces.com/contest/1313/problem/C2 题目链接 不同于简单版本的暴力法,这个数据范围扩充到了五十万.所以考虑用单调栈的 ...

  2. sqli-labs less-17 --> less-20

    Less-17 (报错盲注) 参考资料1:https://www.cnblogs.com/AmoBlogs/p/8673748.html

  3. [POI2005] SKA-Piggy Banks - DFS

    有N个小猪存钱罐.每一个存钱罐能够用相应的钥匙打开或者被砸开.Byteazar已经将钥匙放入到一些存钱罐中.现在已知每个钥匙所在的存钱罐,Byteazar想要买一辆小汽车,而且需要打开所有的存钱罐.然 ...

  4. 带你快速了解Linux文件系统

    http://www.embeddedlinux.org.cn/emb-linux/file-system/201807/03-8197.html 这篇教程将帮你快速了解 Linux 文件系统. 早在 ...

  5. Sentence by defender

    也许,人在旅途,不是你看清了多少事,而是你看轻了多少事.

  6. jQuery---固定导航栏案例

    固定导航栏案例 <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  7. DataGridView 定位到指定行

    //定位到指定行(样式)dataGridView1.ClearSelection();dataGridView1.Rows[selectIndex].Selected = true; //让指定行处于 ...

  8. 转行小白成长路--java基础

    每天都会发一篇,一点一滴,记录在这条路上的足迹.立个flag 2019年3月份至今已近一年,对信息技术有个大概的了解,个人认为对于这门技术更应该从最底层的原理入手,了解计算机演化的历史,从计算机语言到 ...

  9. yolo系列阅读笔记(v1-v3)

    yolov1 模型输出的概率建模 图片首先被分割为S*S的网格(grid cell).如果一个bbox的中心落在一个网格里,则该网格负责检测该物体.(对于pascal数据集,S定为7) 每个网格预测B ...

  10. c++踩坑大法好 赋值和指针的区别

    1,先说结论: 两个指针指向同一个结构,一个改了结构,另一个也会改掉. 两个指针指向同一个结构,修改了其中一个的指向,并且改了其中的内容,另一个不为所动. 2,看例子 main.cpp #includ ...