51nod 1488 帕斯卡小三角

2021-08-10 04:20:38 字數 818 閱讀 8622

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一下不難發現路徑必然是從某個(1,s)走到(x-y+s,s)然後再沿著對角線走到(x,y)。

那麼ans=a[s]*(x-y+s)+c[y]-c[s]

把式子畫一畫,然後用單調棧維護乙個凸殼。每次找答案的時候在上面二分即可。

#include 

const int n = 100005;

intread()

while (ch >= '0' && ch <= '9')

return

x * f;

}struct note

w[n];

bool cmp(note a,note b)

int n,m;

int a[n];

int c[n],ans[n];

double getk(int j,int k)

int getans(int

s,int

x,int

y)int

q[n];

void solve()

ans[w[now].id] = getans(q[r + 1], x, y);

now++;}}

}int main()

51nod1488 帕斯卡小三角

可以證明以下幾個結論。所求的f x y 即為從第一行的某一點開始往下走,只能向下或向右下走,到點 x y 的最短路。所走的路徑,只在某一列有豎直向下的路徑,在其他列都為斜向下。進一步地,一定是從起點開始往下,然後一直斜向下。如果i y 且ai aj 那麼 i 一定不是最優解。記a i的字首和為si ...

css實現小三角

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

css3實現小三角

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