原创 POJ 2763 Housewife Wind

連通圖任意兩點間路徑唯一,那麼肯定是樹,不然就會有圈   如果沒有動態的修改邊權的操作,就是簡單的LCA問題了   現在加入動態操作後,如果修改(u,v)這條邊,且不妨設u是v的父節點,那麼以v爲根的子樹中所有節點的dis值都會改變 我們

原创 hdu 2159 FATE

二維揹包,dp[i][j]表示忍耐度爲i,且還可以殺j個怪時能獲得的最大經驗值dp[i][j]=max(dp[i][j],dp[i-r[k]][j-1]+e[k]),r[k]爲殺死第k種怪掉的忍耐度,e[k]爲第k種怪的經驗值注意方程轉移

原创 2011 Multi-University Training Contest 1 - Host by HNU

B Cat VS Dog這題HDU上2728貌似是原題,坑爹啊比賽時候還是想了好一會的,後來發現貓和狗的個數都是坑爹的,根本沒用,求最多的人滿意,我們只要關注人和人的關係就行了如果i和j衝突,即要麼i喜歡的是j不喜歡的,要麼j喜歡的是i不

原创 POJ 3304 Segments

給n條線段,問是否存在一條直線,所有線段在直線上的投影有公共點 這個問題等價於:是否存在一條直線,與所有線段都有交點 證明思路:首先,如果線段AB在直線L上的投影爲A'B',那麼A'B'之間的任意點C',過它做L的垂線,與AB必然有交點,

原创 ural 1297 Palindrome

求一個串的最長迴文子串 把原串的反串加個原串後面,中間加個沒有出現過的字符 然後,原串中,下標i在反串中對應的位置爲2*l-i 如果求以i爲對稱軸的迴文串,我們求suffix(i)和suffix(2*l-i)的LCP 如果求以i和i+

原创 poj 3228 Gold Transportation

我用的二分邊長+網絡流,這題也可以用枚舉邊長+並查集來做 對於每個有金礦的點,源點向其連一條容量爲金礦數的邊,對於每個倉庫,向匯點連一條容量爲倉庫儲存量的邊,然後對於所有邊長不大於當前枚舉的值的邊,連雙向的容量爲無窮的邊 如果滿流,則該枚

原创 TSP問題

TSP問題最主要的特徵,點數一般爲16以爲,然後每個點只能經過一次,求遍歷所有點的最小代價 原始的TSP問題是要走一條迴路的,即漢密爾頓迴路,問題變形的話,可以不回到原點,也可以有多個原點 POJ 1699,把每個串看成一個點的話,就是求

原创 poj 2373 Diving the Path

dp方程爲dp[i]=min{dp[j]}+1,2*a<=i-j<=2*b,表示一個噴頭控制範圍的右端點爲i時,最少需要的噴頭數(i肯定爲偶數) 直接搞轉移是L^2的,但j是在由i確定的一個範圍內的,所以可以用單調隊列優化 另外,這題比較

原创 hdu 3911 Black and White

經典線段樹問題,需要用上懶操作 對於每個區間,記錄該區間從左端點開始連續的1和0的個數,從右端點開始連續的1和0的個數,整個區間最多的連續1和0的個數,以及這個區間是否被翻轉過 每次訪問子區間時,如果父區間被翻轉過,子區間也要被翻轉,標記

原创 hdu 3120 dolphin

這個題很不錯哦,用到了最短路+二分答案+dfs,出題人太厲害了 首先,100個點,總共的點的標號數目可能達到100,壓縮不了,那就只能dfs了,但肯定需要剪枝 我自己想到的剪枝就是,先不管標號的問題,從終點做一次最短路,記錄路徑,如果源點

原创 ZOJ 3535 Gao the String II

搞了半天,預處理各種錯。。。 先說下題目意思吧,不好理解,當時比賽的時候是以爲把得到的S和每個Bi去比,Bi的每一位如果正確對上了就算得1分,結果樣例直接沒過,就扔掉了 後來看了解題報告和標程,發現應該是S和每個Bi去比,當Bi是S的子串

原创 hdu 2571

簡單DP,但需要注意的是起點必須爲左上角,所以第一行不能由第0行轉移,第一列不能由第0列轉移 代碼: #include<iostream> #include<memory.h> #include<string> #include<cstd

原创 POJ 2318 TOYS

問每個凸四邊形裏有幾個點,由於上邊和下邊是給定的,所以只需要判斷每個點和每條cardboard partition的左右關係 單調性顯然,可以二分來搞,再用叉積判斷方向 #include<iostream> #include<cstri

原创 POJ 1946 Cow Cycling

定義dp[i][j][k]表示第i頭牛領頭,此時消耗j點能量,走了k圈的最少時間 如果此時更換領頭的牛,dp[i][k][k]=min{dp[i-1][j][k],dp[i][k][k]} 否則,dp[i][j][k]=min{dp[i]

原创 hdu 1024 Max Sum Plus Plus

dp[i][j]表示以第i個數字爲第j段的結尾的最大和 dp[i][j]=max(dp[i-1][j],dp[k][j-1])+a[i],j-1<=k<i 即要麼和第i-1個數連在一起構成第j段,要麼自己爲新的一段,與之前的j-1段構成j