hdu 3480 기울기 dp
5418 단어 HDU
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define Maxn 10010
#define LL int
using namespace std;
LL dp[Maxn][2],num[Maxn];
int que[Maxn*10];
inline LL getleft(int x,int j,int k)
{
return dp[j][x]+num[j+1]*num[j+1]-(dp[k][x]+num[k+1]*num[k+1]);
}
inline LL getright(int j,int k)
{
return 2*(num[j+1]-num[k+1]);
}
int main()
{
int n,m,i,j,head,rear,t,Ca=0;
int now,pre;
scanf("%d",&t);
while(t--){
memset(dp,0,sizeof(dp));
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",num+i);
sort(num+1,num+n+1);
now=1,pre=0;
for(i=1;i<=n;i++)
dp[i][now]=(num[i]-num[1])*(num[i]-num[1]);
for(j=1;j<m;j++){
head=1,rear=0;
que[++rear]=j-1;
now=!now;
pre=!pre;
for(i=j;i<=n;i++){
while(head<rear&&getleft(pre,que[head+1],que[head])<getright(que[head+1],que[head])*num[i])
head++;
dp[i][now]=dp[que[head]][pre]+(num[i]-num[que[head]+1])*(num[i]-num[que[head]+1]);
while(head<rear&&getleft(pre,i,que[rear])*getright(que[rear],que[rear-1])<=getleft(pre,que[rear],que[rear-1])*getright(i,que[rear]))
rear--;
que[++rear]=i;
}
}
printf("Case %d: %d
",++Ca,dp[n][now]);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu4671(다교리그 7--수 시뮬레이션)클릭하여 링크 열기 제목: n과 서버, m개의 데이터베이스가 있고 모든 데이터베이스는 서버를 연결해야 하지만 모든 데이터베이스는 서버를 연결하는 우선순위가 있습니다.모든 데이터베이스의 서버 우선순위를 구하다.또한 한...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.