【題意】
給你n個村莊,每兩個相鄰的村莊有一條路,m個操作,每次都要從乙個村莊走到另外乙個村莊,每一條路每次都有乙個維修的費用,每條路一開始是關閉的,你可以開啟一次,關閉一次。問你最少的費用是多少。
【解題方法】
copy一遍題解:為了使得花費最小,對於一段路來說,它的開啟時間就是最早一次被用到到最後一次被用到這段時間.對於每乙個操作a,b,在兩個點上打上標記,從左至右做一遍掃瞄,可知道每段路當前有哪些操作會用到它,取出最大值和最小值,在這兩個位置打上標記,最後對結果再進行一次掃瞄即可.
【ac **】
#include using namespace std;
const int maxn = 2e5+10;
int w[maxn],c[maxn];
vectorv[maxn];
sets;
int mx[maxn],mi[maxn];
int main()
for(int i=1; i0) s.insert(j);
else s.erase(-j);
}if(s.size())
else
}for(int i=1; i
多校聯合訓練 hdu5791 Two
hdu5791 dp i j 表示的是序列a前i個數字和序列b前j個數字的公共子串行的總個數,那麼的dp公式就可以這麼表示 理解一下此公式若最尾部的a i 和b j 相等的話,那麼單獨的a i 和b j 組成1個相同子串行。同時我們可以想一下之前的前i 1個子序列和前j i個子序列再加上a i 又能...
多校聯合訓練4 5773
解題方法 0可以轉化成任意整數,包括負數,顯然求lis時盡量把0都放進去必定是正確的。因此我們可以把0拿出來,對剩下的做o nlogn 的lis,統計結果的時候再算上0的數量。為了保證嚴格遞增,我們可以將每個權值s i 減去i前面0的個數,再做lis,就能保證結果是嚴格遞增的。ac include ...
2018多校聯合訓練2
打的慘不忍睹,就過了3題 1004 水題,直接輸出yes就過了,solved by lyy include using namespace std define ll long long int n int main return 0 1010 逆序對 min x,y 隊友一開始wa了4發,給了他模...