原创 hdu 2852 線段樹 單點更新

主要是查詢的時候 本來時間就比較緊 查詢的時候直接暴力二分求答案 超時 看了下別人代碼 主要是find的時候要直接find速度快了很多 #include<cstdio> #include<cstring> #define lson l,m

原创 hdu 3874 線段樹 離線查詢

要求一個區間所有數之和 求和時要去重  離線查詢 先把所有查詢離線 然後按照右端點排序 每次保證加入後一個數的時候線段樹中沒有和他重複的 如果重複就把前一個刪掉 這樣由於之前排序過 保證不會漏解 #include<cstdio> #inc

原创 hdu 4114 狀壓dp floyd

dp[s1][s2][i] s1爲當前必達景點狀態 s2爲當前擁有鑰匙狀態 i爲當前到達節點 #include<cstdio> #include<cstring> #include<algorithm> using namespace s

原创 hdu 5381 線段樹區間合併

gcd運算的時候 如果之前的保持不變 新加入一個數進行gcd運算 得到的答案只會越來越小 這題要我們求[l.r]中所有子區間的gcd值之和 我們就要儘量保存子區間的gcd在合併區間的時候以儘可能快的速度合併 我們可以知道gcd的數量是lo

原创 hdu 5045 狀壓dp

因爲所有人做題數量差不能大於1 所以可以把每n道題看成一組 每一組必須由每個人完成一道的方式完成 dp[i][j] i代表當前題數 j代表當前隊員狀態 #include<cstdio> #include<cstring> #include

原创 hdu 4906 狀壓dp

題意:給出n,k<=20,L<=10^9 問能不能通過不大於L的數組成一個含n個數的序列使得能從這個序列中挑出幾個數的和爲k,求滿足條件序列的個數 題解:看到k<20可以用sum的狀態做狀壓dp的狀態 狀態轉移方程next=(1<<(p-

原创 hdu 2894 歐拉回路

代碼很短 但看別人的blog看了很久 才理解 第一問的答案毫無疑問是2^n 第二問的答案長度肯定是2^n   因爲要求前n個必然是0 原問題是要求能夠表示出0-(2^n-1)的數 每個數只能出現一次 一圈是一個循環 每條邊也只能經過一次

原创 【hdu】2433 Travel【最短路刪邊】

題意: 給出一個n節點m條邊的圖,設這個圖所有點之間最短路之和爲sum,然後輸出刪除每一條邊之後的sum值,圖不聯通輸出inf 題解: 第一次計算所有圖之間最短路之和的時候 在spfa算法裏面記錄used[i][j][k]代表以

原创 hdu 5690 多種方法實現

太菜了 比賽的時候下面羅列的方法大致方向都想對了 但都差了一點 沒敢寫 不夠自信 第一種方法:找循環節法 注意循環節不一定就從第一個開始 #include<cstdio> #include<cstring> #define ll __i

原创 .CodeforcesBeta Round #19 D. Points 線段樹 單點更新

題意:三個操作均在二維座標軸上進行 Add(x,y)加入一個點 remove移出一個點 find尋找最小的座標嚴格大於當前點的座標 沒有輸出-1 x優先級大於y 題解:因爲是在二維座標軸上操作所以可以將所有操作按照x軸排序,然後把x軸座標

原创 hdu 3920 狀壓dp

題意:2n個敵人需要殺死,分佈在地圖上的不同位置,每次能殺死2個人,代價爲本人與敵人1距離+敵人1與敵人2距離 思路:狀態壓縮dp 狀態o每位代表一個敵人0未殺死1殺死 直接一維dp枚舉 #include<cmath> #include<

原创 【hdu】4228 Flooring Tiles【反素數】

題意: 求用最少的單位正方形拼出n個不同的矩形,求所需的單位正方形數 題解: 我們知道一個數的因子個數爲2*n或者2*n-1個的話就能拼出n個不同的矩形,用求反素數的方法,也就是說求最小因子數爲2*n或2*n-1的數 #include<c

原创 【hdu】4521 小明系列問題——小明序列【LIS變種】

題意: 求最長上升子序列,其中子序列中相鄰的兩個數的下標差要超過k 題解: 英語不好讀題都讀不好 之前看成了子序列中相鄰的兩個數的大小要超過k怎麼都做不對 後來lower_bound寫成了upper_bound 記住了最長上升子序列如果要

原创 poj 2828 線段樹 單點更新

題意:有N個人排隊,每一個人都有一個val來對應,每一個後來人都會插入當前隊伍的某一個位置pos後面。要求把隊伍最後的狀態輸出。 題解:一看到這種題目如果之前做過類似的題目很容易就可以想到要倒序完成 因爲這樣每個數插入的位置在當前都是可以

原创 hdu 3046 最小割

直接每個點和周圍四個點連一條容量爲1的邊 s與狼連容量爲inf的邊 羊與t連容量爲inf的邊 之前以爲這樣會超時 還是太嫩了。。 #include<cstdio> #include<cstring> #include<algorithm>