原创 poj 1741 Tree (點的分治)

題意:給你一棵樹,問在樹上有多少點對之間的最短距離小於等於K,且(a,b)和(b,a)算一個 思路:這題可以用點的分治來做,選取點爲這棵樹的重心,即最大子樹最小的點。然後可以分兩種情況進行處理,過這一點與不過這一點,而不過這一點就遞歸處理

原创 2014年山東ACM省賽總結

A題: 解法:簡單的推公式題目。     根據簡單的計算,可以算出拋物線與直線的方程,拋物線部分根據積分即可求出面積,直線直接用三角形求面積。 #include <iostream> #include <cstdio> #include

原创 hdu 2089 不要62 (數位DP)

題意:給定一個區間[n,m],求n到m中沒有“62”和“4”的數的個數。其中例如62548 ,412包含62 和4 所以是不合法的。 思路:設dp[i][j]表示i位數且開頭爲j的數中不包含“4”和“62"的數的個數,則可以得出dp[i]

原创 poj 1655 Balancing Act(樹形DP)

題意:求樹上的一個點,刪除該點後形成的衆多樹中,最大的樹的大小最小。換句話說就是求樹的重心。 思路:DP+DFS 定義狀態:dp[a]表示 以a 爲根節點的子樹大小 然後一遍DPS,每次判斷a的子樹的各個dp值和n-dp[a]的值中的最大

原创 poj 3074 Sudoku (精確覆蓋,DLX,搜索)

題意:一個9*9的數獨,實現給你一些放好的數,且保證答案只有一種,讓你輸出答案。 思路:這題可以採用精確覆蓋的DLX做法。首先對於數獨而言,每個格子有9種情況,且有9*9 個格子,所以可以讓行等於9*9*9。然後再看數獨的限制條件,每個數

原创 poj 1390 Blocks(DP)

題意:有n個方塊排成一列,對於每個方塊都有一種顏色。現在有一種消除規則,就是對於連續顏色相同的一行可以消去,且消去後右邊的方塊左移,並且效益爲個數的平方。現在問你通過怎麼的消除方式,可以使效益最大。 思路:  定義狀態dp[a][b][c

原创 hdu 4371 Minimum palindrome(13年成都網絡賽D題)(找規律)

題意:讓你使用小寫字母表的前m個字母,然後組成一個長度爲n的字符串,使其字符串的最大回文串的長度是所有構成長度爲n串的最大回文串長度的最小值。輸出字典序最小的串。 思路:當m==1 的時候,只能使用a ,那麼a 循環即可。當 m>2時,此

原创 poj 1141 Brackets Sequence (DP+構造)

題意:給你一個含有中括號和小括號的序列,讓你使用最少的括號,使這個括號序列合法。 思路:定義狀態:dp[a][b]表示a-b區間中使其合法最少使用的括號數。初始化時: dp[x][x]=1;  狀態轉移:if(最外層的兩個點a,b爲一個完

原创 hdu 4734 F(x) (2013成都網絡賽G題)(數位DP)

題意:定義一個權重: F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1.(AnAn-1An-2 ... A2A1是組成A的各個位),然後問你0到B 區間內的數的權重小於等於

原创 hdu 4750 Count The Pairs(2013南京網絡賽C題,並查集)

題意:有 n個點,m條邊,現在定義f爲任意兩點間的每條路徑上的最大邊的最小值,給你一個t,問你f>=t的點對有多少個。 思路:像kruskal加邊那樣,從小往大加邊,用並查集來維護點集合。 說明:1、對於一條邊來說,且他的兩個端點a,b不

原创 hdu 3498 whosyourdaddy (重複覆蓋,DLX+迭代加深A*)

題意:有一個英雄,他有一個技能,可以使一個點和與他相鄰的點受到傷害,問最少攻擊幾個點可以使所有點至少被傷害一次。 思路:DLX。很裸。設行爲每一個點,列爲攻擊點,在這裏行元素與列元素都爲n。然後DLX+迭代加深的啓發式搜索就可以了,而啓發

原创 poj 1191 棋盤分割(DP)

題意:題目很簡單,中文題。就是一個棋盤,現在要按一定要求切割n-1次,形成n個矩形,問形成的n個矩形的總分均方差最小。 思路:黑書上的一道題,首先先對均方差進行化簡沒發現只要使矩形的總分平方和最小即可。 狀態:dp[a][b][c][d]

原创 hdu 3652 B-number (數位DP)

題意:找出小於n且是13的倍數,並且包含'13'的數 思路:設狀態dp[a][b][c][d]位數爲a,模13的餘數爲b,c表示是否含有13 (c==1表示有,c==0表示無),d表示上一位的數字,最前面爲0.     則可以看出轉移狀態

原创 hdu 3555 Bomb (數位DP)

題意:給你一個數n,找出小於n且不包含'49'的數的個數 思路:dp[a][b][c]表示位數爲a,開頭爲b,且是否包含49爲c的數的個數(c==1表示包含49,反之不包含) 狀態轉移方程爲: if c==1 { dp[i][j][1]+

原创 poj 3252 Round Numbers (數位DP)

題意:給你兩個十進制數n,m,求n,m在二進制情況下(n,m)區間中數字0比數字1個數多的二進制數有多少個。 思路:數位DP。     設DP[a][b][c]a位數,開頭爲b,含有c個1的數的個數。     轉移方程: if(b==1)