日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu 3480 斜率dp

發(fā)布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 3480 斜率dp 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

思路:很普通的斜率dp

#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\n",++Ca,dp[n][now]);}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/wangfang20/p/3369258.html

總結(jié)

以上是生活随笔為你收集整理的hdu 3480 斜率dp的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。