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顯示效果是這樣的 可以看到四個不同顏色的三角形連在一起。我們只想要乙個,比如向上的紅色三角形,怎麼辦,那就是...