字首和思想

2021-08-25 22:14:14 字數 813 閱讀 1875

乙個區間可以拆成兩個字首和,這是乙個很基本的思想。

反過來,兩個字首和的關係可以由乙個區間表示。。。

有時某些區間問題可以轉化為字首和問題繼而減少情況和狀態。。

例: 魔術師的桌子上有n個杯子排成一行,編號為1,2,…,n,其中某些杯子底下藏有乙個小球,如果你準確地猜出是哪些杯子,你就可以獲得獎品。花費c_ij元,魔術師就會告訴你杯子i,i+1,…,j底下藏有球的總數的奇偶性。

採取最優的詢問策略,你至少需要花費多少元,才能保證猜出哪些杯子底下藏著球?

n<=2000

可以發現,第i個杯下球是否存在取決於字首i與字首i-1的關係,反之如果知道第i個杯下球是否存在那麼可以知道字首i和字首i-1的關係,意思是這兩個問題是等價的!

那麼我們就需要知道對於每個i,字首i和字首i-1的關係。

如果我們詢問了區間[l,r],那麼我們就知道了字首l-1和字首r的關係,把每個字首看做乙個點,兩個點之間的關係當做邊,那麼我們需要把0~n這n+1個點聯通。(關係是可以傳遞的)

那麼我們就求乙個最小生成樹就行了。

ac code:

#include

#define maxn 2005

#define ll long long

using

namespace

std;

int n,c[maxn][maxn],val[maxn];

bool usd[maxn];

ll ans;

int main()

printf("%lld\n",ans);

}

字首和思想 JZOJ 100035 區間

傳送門 define runinstance x delete new x struct cheat1 在主函式中 if n 1000 runinstance cheat1 這樣就能做到不呼叫就不占用空間,呼叫不會爆棧,多次呼叫不會記憶體洩露。如果確實要多次呼叫,最好還是把迴圈寫裡面 對於25 的資...

字首和演算法 一維字首和 二維字首和

輸入乙個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l,r。對於每個詢問,輸出原序列中從第l個數到第r個數的和。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數,表示整數數列。接下來m行,每行包含兩個整數l和r,表示乙個詢問的區間範圍。輸出格式 共m行,每行輸出乙個詢問的結果。資...

字首和 (1)什麼是字首和和一維字首和

字首和 prefix sum 的定義為 對於乙個給定的數列 a,它的字首和數列 s 是通過遞推能求出來得 例如 假設陣列a和字首和陣列s都已經定義 int i 初始條件 a 0 0 s 0 0 for i 1 i n i 下面我們用乙個模板題,將完整的一維陣列字首和做乙個簡單的展示。題目鏈結 inc...