原创 P4310 絕世好題(DP)

二進制拆分來考慮,設f[i]表示一個數第i位爲1的最長長度,那麼在處理數a時,如果它的第i位爲1,那麼可以從f[i]轉移過來。取max{f[i]},作爲a的序列最長長度,用這個最長長度來更新數a爲1的位的f[i]。 語言描述有限,詳見代碼。

原创 P1020 [NOIP1999 普及組] 導彈攔截

nlogn解決最長上升/不下降/下降/不上升子序列問題。 設f[len]表示子序列長度爲len時序列最後一個數是什麼。 那麼可以根據具體情況來討論,一種是直接++len,將其存在數列最後,另一種是用更優的更新不優的。 此題中第一問不難看出是

原创 P1944 最長括號匹配(DP)

注意數組下標及因下標爲負值而造成的數組越界問題。 #include<cstdio> #include<iostream> #include<cstring> using namespace std; const int N=1000005;

原创 P1091 [NOIP2004 提高組] 合唱隊形(DP)

用O(n^2)的做法來做,可以確定以每個點爲結尾的最長上升/下降子序列,注意最後兩個子序列相加時枚舉的斷點會被統計兩次,所以需要減一。 #include<cstdio> #include<iostream> #include<cstring

原创 Atcoder ABC220 D(記憶化搜索||DP)

https://atcoder.jp/contests/abc220/tasks/abc220_d 設f[i][j]表示拿出要操作的數之後剩餘長度爲i,在序列外的數爲j的方案數,進行記憶化搜索。 注意因爲f[i][j]中可能存0,所以f[]

原创 Atcoder ABC 220F(換根dp)

https://atcoder.jp/contests/abc220/tasks/abc220_f 換根dp。 首先從根節點dfs一遍,統計出所有子樹的大小。 然後求出根節點的答案。 最後換根dp,推出式子:f[v]=f[u]+n-sz[v

原创 P4513 小白逛公園(線段樹)

pushup:t[k].max=max(t[k<<1].max,t[k<<1|1].max,t[k<<1].rmax+t[k<<1|1].lmax); 注意查詢,如果所要找的區間恰好在左區間或右區間中,則直接查找。否則和pushup中一樣操

原创 P4145 上帝造題的七分鐘 2 / 花神遊歷各國(線段樹)

區間求和+區間開平方。 對於區間開平方,暴力進行單點開平方,存一個max,如果max<=1,那麼不需要開平方。 #include<cstdio> #include<iostream> #include<cmath> using namesp

原创 P1333 瑞瑞的木棍

將每個顏色看成點,將小木棒看成邊,如果能連成,即爲一筆畫問題。 首先要注意判斷圖是否連通,然後統計奇點個數。 注意map的一個優化!! 未優化(90pts T一個點) #include<cstdio> #include<iostream>

原创 P1455 搭配購買

注意看是不是一個並查集的祖先: f[i]==i #include<cstdio> #include<iostream> using namespace std; typedef long long ll; const int N=10005

原创 How far away ? HDU

LCA應用求最短路 #include<cstdio> #include<iostream> #include<cstring> using namespace std; const int N=40005; int T,n,m,ans,to

原创 嚴格最小生成樹

#include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> using namespace std; const in

原创 部落劃分

每合併一次,部落數減一,最終合併到合法的數量。 若i時得到nk時,不能確定w[i+1]即爲答案,因爲可能u[i+1].fv[i+1].f,所以還需要再往下枚舉判斷。 #include<cstdio> #include<iostream> #

原创 [USACO14MAR]Watering the Fields S

歐幾里得距離不需要開根號,題目描述聯通的最小代價指的是和。 細節: 1.因爲克魯斯卡爾算法枚舉的是邊,所以不需要在意是無向圖,僅存一遍即可,即32、33行,j直接從i+1開始枚舉。 2.最後判斷時,如果tot==n-1,讓其break,再外

原创 [USACO09FEB]Revamping Trails G

分層圖最短路,注意數組範圍 #include<cstdio> #include<iostream> #include<cstring> #include<queue> using namespace std; const int N=200