zoukankan      html  css  js  c++  java
  • luogu P4072 [SDOI2016]征途 斜率dp

    #include<map>
    #include<queue>
    #include<time.h>
    #include<limits.h>
    #include<cmath>
    #include<ostream>
    #include<iterator>
    #include<set>
    #include<stack>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define rep_1(i,m,n) for(int i=m;i<=n;i++)
    #define mem(st) memset(st,0,sizeof st)
    int read()
    {
    	int res=0,ch,flag=0;
    	if((ch=getchar())=='-')             //判断正负
    		flag=1;
    	else if(ch>='0'&&ch<='9')           //得到完整的数
    		res=ch-'0';
    	while((ch=getchar())>='0'&&ch<='9')
    		res=res*10+ch-'0';
    	return flag?-res:res;
    }
    typedef long long ll;
    typedef pair<int,int> pii;
    typedef unsigned long long ull;
    typedef pair<double,double> pdd;
    const int inf = 0x3f3f3f3f;
    const int N=3030;
    int n, m, sum[N], q[N], hh,tt;
    long long f[N], g[N];
    double Y(int i)
    {
    	return g[i]+sum[i]*sum[i];
    }
    double X(int i)
    {
    	return sum[i];
    }
    double slope(int i,int j)
    {
    	return (Y(i)-Y(j))/(X(i)-X(j));
    }
    int main()
    {
    	n=read(),m=read();
    	for(int i = 1; i <= n; i++)
    	{
    		sum[i] = read();
    		sum[i] += sum[i - 1];
    		g[i] = 1ll * sum[i] * sum[i];
    	} 
    	for(int k=1; k<m; k++)
    	{
    		hh=0,tt=0;
    		q[++tt]=k;
    		for(int i=k+1; i<=n; i++)
    		{
    			while(hh<tt && slope(q[hh],q[hh+1])<2*sum[i])
    				hh++;
    			f[i]=g[q[hh]]+(sum[i]-sum[q[hh]])*(sum[i]-sum[q[hh]]);
    			while(hh<tt && slope(i,q[tt-1])<slope(q[tt],q[tt-1]))
    				tt--;
    			q[++tt]=i;
    		}
    		for(int i=1; i<=n; i++)
    			g[i]=f[i];
    	}
    	//最后乘上m 
    	cout<<m*f[n]-sum[n]*sum[n]<<endl;
    	return 0;
    }
    
    
  • 相关阅读:
    JSON总结
    protobuf 编码实现解析(java)
    Java Enum解析【转】
    protobuf 原理
    apache CXF wsdl2java工具的使用
    Web Service中的几个重要术语
    Servlet过滤器
    Java中static关键字的作用和用法详细介绍
    浅析Java中的final关键字
    Java中按值传递与按引用传递的区别
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12871239.html
Copyright © 2011-2022 走看看