原创 數論之歐拉函數

定義:歐拉函數φ(n),表示小於或等於n的數中與n互質的數的數目。 性質: 1) φ(1) = 1 2) 若n是質數p的k次冪,φ(n) = p^k - p^(k-1) = (p - 1)*p^(k - 1) 因爲p爲

原创 URAL 1326(狀態壓縮DP)

題目鏈接:URAL 1326 解題思路: 狀態壓縮DP,也就是集合的DP,思路跟TSP問題很相似。需要注意的就是可以買多T^T 代碼: #include <cstdio> #include <cstring> #include

原创 POJ 2195(二分圖最大權匹配)

題目鏈接:POJ 2195 解題思路: 這題可以轉化成權匹配或者費用流問題。首先需要根據輸入構圖,將問題轉成權匹配問題,之後套用KM算法即可。KM算法入門很好的一道題目。 代碼: #include <cmath> #includ

原创 統計迴文子序列(動態規劃)

dp[i][j]代表區間[ i , j ]中迴文子序列的個數…… #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #def

原创 HDU_1576(乘法逆元)

題目鏈接:HDU_1576 題目說明: 乘法逆元的應用,測一發模板(用模線性方程做的) 代碼: #include <vector> #include <cstdio> #include <cstring> #include <i

原创 POJ 2096(概率DP)

題目鏈接:POJ 2096 解題思路: 總的來說狀態方程還是蠻好想的,每次找bug的時候,有可能會出現四種情況,一是在已經找到bug的系統中找到了舊bug,二是在新的系統中找到舊bug,三是在已經找到bug的系統中找到了新bug

原创 威佐夫博弈(介紹)

題目大意: 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子,遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者爲勝者,現在給出初始的兩

原创 匹配及其相關問題(二)

前言: 第一篇博客描述了一些與匹配相關的基本概念,下面來正式介紹匹配算法。這篇博客是比較久之前寫的,主要介紹二分圖最大匹配(二分圖最大邊獨立)算法的匈牙利算法,許多匹配算法都是基於這個算法的思想進行改進的,匈牙利算法的時間複雜度

原创 URAL 1113(數學)

題目鏈接:URAL 1113 解題思路: 這道題目其實是一類經典題目來着,是一道極限問題,即穿越沙漠問題,這種題目都是求在油箱容量受限的前提下,車輛如何走一段比較長的路的問題。一開始想沒有想出來,後來看到這篇博客,就懂了。 這

原创 強連通分量的tarjan算法應用(一)

題目鏈接:POJ 2186 解題思路: 先用tarjan算法求出圖中的強連通分量,再求出縮點後唯一的葉結點即可。 代碼: #include <vector> #include <cstdio> #include <cstring

原创 CSU_1216(異或最大值)

題目鏈接:CSU_1216 題目簡述: 經典題目,求一個數組中兩個數異或運算的最大值。題目極其簡單,但是要求的複雜度需要達到O(N * log(N)),還是比較難的。 解題思路: 總的思路就是構建一棵0-1字典樹,然後一個數讓

原创 CodeForces 302C(數學)

題目鏈接:CodeForces 302C 解題思路:操作要求是選n個數,改變它們的符號,使得所有數的和最大。n爲奇數時,翻轉幾個數都是可行的;n爲偶數時,只能翻轉偶數個數,所以我們要留一個絕對值最小的數爲負數。 代碼: #incl

原创 UVA 11300(數學)

題目鏈接:UVA 11300 (on vjudge) 解題思路: 首先要使用遞推推出每個人給了前一個人多少金幣的公式,然後將問題轉化成求數列中位數的問題(數軸上找一個到所有點距離和最小的點,這個點就在中位數的位置) 代碼: #i

原创 URAL 1104(數論)

題目鏈接:URAL 1104 解題思路: 思路就是簡單的模運算規則:( a * b ) % c = ( ( a % c ) * (b % c ) ) % c 根據上述規則,有如下規律:( a * b^n ) % ( b - 1

原创 POJ 1094(拓撲排序)

題目鏈接:POJ 1094 解題思路: 基本的思路就是拓撲排序算法。需要注意的是環的判斷優先於排序是否唯一的判斷。 代碼: #include <queue> #include <cstdio> #include <cstring