原创 Educational Codeforces Round 21 C. Tea Party

貪心 題目鏈接http://codeforces.com/contest/808/problem/C 題目描述:Polycarp招待朋友,給朋友們倒茶,朋友們的茶杯容量不一樣,Polycarp的茶壺容量是w,w小於朋友茶杯滿容量的總和。倒

原创 Oulipo POJ - 3461

裸的KMP 代碼如下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <algorithm> using name

原创 珂朵莉的數列

樹狀數組 題目描述:給你一串數字序列,求所有區間的逆序對。 解題分析:對於每一個逆序對,計算它的貢獻,也就是所有包含這個逆序對的區間。用樹狀數組來維護,不過得先離散化。數據太大,longlong無法表示,上的java 代碼如下: impo

原创 The Morning after Halloween UVA - 1601

狀態空間搜索 題目描述:把圖中的小寫字母,移動到對應的大寫字母處,這些小寫字母可以同時移動,而且只能通過空白處移動,兩個字母之間不可以互換位置,也不可以在同一個位置。 解題分析:直接暴力bfs的話,狀態數目是256*256*256,狀態數

原创 Traveling by Stagecoach POJ - 2686

狀態壓縮DP 題目描述:旅行商要從a城市到b城市,它共有n張馬車票,一共有p條道路,m個城市,每兩個城市之間花費的時間是道路之間的距離除以馬車的數量,求最小的花費時間。 解題分析:關鍵還是在於怎麼表示狀態,定義dp[s][v]爲票還剩s,

原创 HDU 4553 約會安排

線段樹區間合併+標記優先級 題目描述:小明需要安排和基友開黑和和女神約會的時間。這兩個時間總是一段連續的時間,小明總是會找最早的時間來開始這些事。當有基友找他開黑的時候,他會先在時間表裏找最早的連續時間,如果有,就開黑,沒有就不開黑。當有

原创 HDU 1540 Tunnel Warfare

線段樹單點更新 區間合併 題目描述:一串線性的村莊,除了頭尾的兩個村莊,其他村莊都和左右的兩個村莊相鄰,可以摧毀一個村莊,這樣連接的關係就會被破壞,也可以修復一個村莊,連接的關係也會修復,詢問一個村莊,求與它相連接的村莊有多少個。 解題分

原创 Coloring Brackets CodeForces - 149D

區間DP 題目描述:輸入一串保證合法的括號序列,要求給這個括號序列串染色,滿足三個要求:(1·)染色要不爲紅,要麼爲藍,要麼不染色(2)每隊匹配的括號,只能有一個染色(3)相鄰的染色的括號不能染一個顏色。 解題分析:定義dp[l][r][

原创 POJ 1651 Multiplication Puzzle

題目描述:給你n個數,拿走一個數,會獲得一個值,該值是這個數*它左邊的數*它右邊的數,最後的結果是取走中間n-2個數所獲得的值的和。因爲選取的順序不一樣,所獲得的值也不一樣,求取走中間n-2個值,最小的結果。 解題分析:其實就是類似矩陣連

原创 Party at Hali-Bula UVA - 1220

樹形DP基礎 求最大獨立集 題目描述:老闆和員工不能同時選,問最大能選擇多少人,並且種種方案是否唯一。 解題分析:定義兩個數組int dp[maxn][2];dp[u][1]表示以u爲根節點的子樹中選擇u能得到的最大人數,dp[u][0]

原创 HDU 4614 Vases and Flowers

選段樹區間更新 題目描述:插花,每個花瓶只允許插入一枝花。插花操作是從第A個花瓶開始插花,如果第A個花瓶空着,就插入一枝花,否則判斷第A+1個花瓶,知道插完全部的F只花,或者是沒有花瓶可插,把剩餘的花棄掉,操作終止。輸出插花的第一個花瓶和

原创 POJ 2955-Brackets

區間 DP 題目描述:求一個字符串的最長括號匹配子串(非連續) 解題分析:狀態轉移方程全在題目裏,定義了兩種括號匹配的子串: 1若s是匹配的字符串,則(s),[s]也是,那麼狀態轉移方程是if(s[i] == '(' && s[j] ==

原创 Tower of Cubes UVA - 10051

類似於最長上升子序列 題目描述:要求把給出的小正方體儘量排得更高,要求是:下面的小正方體的重量要大於上面小正方體的重量,且相鄰的正方體上面的地面要和下面的頂面顏色相同,求最大高度,並打印小正方體的排放,依次從上到下打印小正方體的序號和那個

原创 FatMouse's Speed HDU - 1160

最長上升子序列 + 打印路徑 題目描述:找最長的老鼠序列要求,後面的老鼠體重比前面的打,速度比前面的小,求這個最長序列的長度,並輸出老鼠序列。 解題分析:此題需要排序,之後按照最長上升子序列並打印路徑就行了。 代碼如下: #include

原创 Matrix Processing ZOJ - 3284

線段樹 題目描述:看題吧,題目說的很清晰。 解題分析:這個題同學用標記瞎搞的方法就過了,網上有人用二維樹狀數組做的,在這寫一個線段樹的寫法。具體是定義兩個線段樹,一個只管行更新,一個只管列更新,每次更新的時候是一段線性的區間。查詢就是兩個