原创 CodeForces - 862C(構造)

題意: 讓你輸出一個長度爲 n 的數組,這個數組所有元素異或和要等於 x。 題解: 首先我們要知道:x ^ y ^ (x ^ y) = 0,這樣我們就可以推出:x ^ y ^ (x ^ y ^ z) = z => x ^ y ^ z ^

原创 POJ 2395 Out of Hay(最小生成樹)

題解: 通過題意我們可以知道,在農場之間尋找最小生成樹,再來找樹中最大路的權值。 代碼如下: #include <algorithm> #include <iostream> #include <cstdlib> #include

原创 CodeForces - 1084D(樹形dp)

題意: 有 n 個城市,每個城市都有 wi 升油。如果兩個城市之間有路,則通過這條路需要消耗 c 升。問從任意地方出發(邊只經過一次),可以最多獲得多少升油? 題解: 可以將題意轉化爲:在一棵樹上求一條路徑(所有點的權值和減去所有邊的權值

原创 沃茲吉德猜想

題意: 沃茲吉德猜想:兩個人進行遊戲,有 n 張撲克牌,每一輪雙方都可以任意抽取1~k 張牌,若某個人無法抽到撲克牌,則另一個人獲勝。 題解: 因爲雙方都聰明,所以可以先手可以維護最優狀態,所以除了k是 1 和 0 是偶數都先手勝利。 A

原创 CodeForces - 1073C(二分)

題解: 二分區間長度,去尺取每一個區間,除去這段區間的操作量,判斷現操作距離目的操作所需步數與區間長度作對比,如果是偶數說明可以到達,否則不行。 #include <algorithm> #include <iostream> #in

原创 CodeForces - 1073D(模擬)

題解: 每一圈都是有規律,像是一層一層的,也就是每一層去掉一個最大值,最多就n層。 #include <algorithm> #include <iostream> #include <cstdlib> #include <c

原创 CodeForces - 883K(貪心)

題解: 中間可能存在的最大值是於兩邊值+1有關,所以我們從左和從右開始維護該點可以最多的路即可。 #include <algorithm> #include <iostream> #include <cstdlib> #inclu

原创 HDU 3853 LOOPS(概率dp)

題解: 由題可以得:(x,y)到(x,y+1)的概率是 p[x][y][1],到(x+1,y)的概率是 p[x][y][2],不動的概率是 p[x][y][0]。所以可以推出下面的公式:dp[i][j] = dp[i][j+1]*p[i]

原创 LightOJ 1030 Discovering Gold(概率dp)

題解: 從後面往前加上本金乘上概率即可,控制好多少個可以走到這裏。 #include <algorithm> #include <iostream> #include <cstdlib> #include <cstring>

原创 LightOJ 1317 Throwing Balls into the Baskets(概率dp)

題解: 每個籃子的選擇概率都是 1/m,所以可以每一次投球進球概率爲 p*1/m+...+p*1/m = p,即每個球的得分概率都是一樣的,可以通過公式獲得。 #include <algorithm> #include <iostre

原创 HDU 4803 Poor Warehouse Keeper(貪心+精度)

題解: 先求出最後的單價,我們每一步都於逼近單價。 因爲只有總價部分可以優化成加一個整數,所以每一步去就加上目標總價與當前總價差多少即可。 #include <algorithm> #include <iostream> #inclu

原创 求樹上任意兩點的權值和

void dfs(int cur, int father) { sum[cur] = 1; for(int i = 0; i < tree[cur].size(); i++) { int son

原创 HDU 4714 Tree2cycle(樹形dp)

題解: 根據題目,我們可以知道只要求不是根的點所連點子鏈個數-1再加上根所連的子鏈個數-2爲刪條的條數,就是可以這個樹可以分成多少條鏈,所刪條數*2+1就是答案了。 #include <algorithm> #include <ios

原创 HDU 4811 Ball(思維)

題解: 先放頭和尾依次左右開始塞滿,找規律。 #include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include

原创 HDU 1520 Anniversary party(樹形dp)

題解: 根據題意可以知道每個點都有可取可不取,所以我們設 dp[i][j] (i 表示第 i 個點,j:0/1 表示取這個人或者不取)。 可以推得公式: dp[u][0] += max(dp[v][1], dp[v][0]) ,dp[u]