51nod1488 帕斯卡小三角

2021-08-02 22:34:01 字數 1054 閱讀 6767

可以證明以下幾個結論。

所求的f(x

,y) 即為從第一行的某一點開始往下走,只能向下或向右下走,到點(x

,y) 的最短路。

所走的路徑,只在某一列有豎直向下的路徑,在其他列都為斜向下。

進一步地,一定是從起點開始往下,然後一直斜向下。如果i

y 且ai

≥aj ,那麼

i 一定不是最優解。記a

i的字首和為si

,假設我們從點(1

,p) 走到(x

,y) ,那麼路徑長度是sy

−sp+

(x−y

+p)a

p 。令上式=b

+sy ,我們得到 pa

p−sp

=(y−

x)ap

+b把a

p 看成橫座標,pa

p−sp

看成縱座標,上式可以斜率優化。根據結論

4 ,我們可以直接用單調棧維護下凸殼,每次詢問在上面二分。

#include

#include

#include

using

namespace

std;

const

int maxn=200010;

vector

int,int> > v[maxn];

int a[maxn],s[maxn],ans[maxn],sta[maxn],n,q,top;

int rd()

return x;

}double getk(int u,int v)

int main()

q=rd();

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

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

ans[(*it).second]=s[i]-s[sta[l]]+a[sta[l]]*(x-i+sta[l]);}}

for (int i=1;i<=q;i++) printf("%d\n",ans[i]);

}

51nod 1488 帕斯卡小三角

f 1,j a j 1 j n.f i,j min f i 1,j f i 1,j 1 a j 2 i n,i j n.a是乙個長度為n的陣列。現在有若干個詢問,輸入x,y,求f x,y n,q 100000 顯然要求的是從第一層某個點 1,s 到 x,y 的最短路徑。yy一下不難發現路徑必然是從某...

css實現小三角

其實早都做過用css來實現小三角的箭頭符號了,不過一直都沒靜下心來仔細研究,今天正好多看了些,都說好記性不如爛筆頭,把所了解到的趕緊記錄下來。大致有兩種方法 邊框法和字元法。邊框法就是利用盒子的邊框變化組合形成的各種三角 字元法就是採用菱形的字元 然後決定定位把多餘的部分溢位掉,該種方法只適合三角和...

css3實現小三角

利用css3的新特性可以完成很多圖形的構建,下面演示如何利用border的特性構建乙個小三角。我們首先新建乙個div,給這個div設定class demo 然後給demo設定如下屬性 demo顯示效果是這樣的 可以看到四個不同顏色的三角形連在一起。我們只想要乙個,比如向上的紅色三角形,怎麼辦,那就是...