Time of Update: 2018-12-05
連結:http://acm.hust.edu.cn/problem.php?id=1010題目:DescriptionThere is a string A. The length of A is less than 1,000,000. I rewrite it again and again. Then I got a new string: AAAAAA...... Now I cut it from two different position and get a new string
Time of Update: 2018-12-05
301 - Transportation458432.83%133876.08%題目連結:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_problem&problem=237題目類型: 回溯法原題:Ruratania is just entering capitalism and is establishing new
Time of Update: 2018-12-05
連結:http://acm.hdu.edu.cn/showproblem.php?pid=3746題目大意:給定一個字串T, 在T後面添加x個字串(讓x最小),使得新字串由首碼字串至少迴圈兩次構成的。例如,abca, 只需要再添加2個字母bc, 形成abcabc,就變成了由abc迴圈兩次構成的。分析與總結:失配函數構造next數組的性質的應用,需要對這個有真正的理解。對於長度為len的字串,假設已經夠造完了next數組,那麼len-next[len]就是這個字串的最小迴圈節。如果正好len%(
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目來源: 點擊開啟連結題目大意給一個字串,可以把連續相同的部分進行縮寫成k(S)的形式,S是一個字串,k表示有連續相同的S例如,abgogogogo,可以縮寫成ab4(go). 還可以嵌套縮寫,比如“nowletsgogogoletsgogogo”, 縮寫成“now2(lets3(go))”思路一道區間dp,但是這題並不好想f(i, j)表示字串的i~j位的最小位元那麼f(i, j) = min{
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目連結: 點擊開啟連結題目大意給出n*m網格中每個格子的A礦和B礦數量,A礦必須由右向左運輸,B礦必須由下向上運輸,管子不能拐彎或者間斷。要求收集到的A,B礦總量盡量大。思路由題意可知,如果格子(i,j)上選擇運輸A礦的話,那麼i行的1~j就要全部選擇A礦。同理,如果選擇B礦,那麼第j列上的1~i行要全部選擇B礦所以推出下面的狀態轉移方程式:f[i][j][0]表示第i行第j列為右下角頂點的矩形地區內,格子(i,j)
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目:點擊開啟連結題目大意有n種長寬高為x,y,z的磚頭,每種都有無數個。磚頭可以用不同姿勢的方向來蓋。磚頭a以某種姿勢可以蓋在磚頭b上,若且唯若a的底部的長寬都要比b的底部長寬要小。問最高可以建多高?思路對於一個x,y,z磚頭,它可以有3中姿勢放置。 (前兩個為地面,後一個為高)x, y, zx, z, yy, z, x把每種姿勢都記錄下來,變成了有3*n種固定姿勢的磚頭。然後建圖,g[i][j] = true,
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目連結: 點擊開啟連結題目大意給定一棵樹,選擇盡量少的節點,使得每個沒有選中的結點至少和一個已選結點相鄰。思路經典的樹形dp題,據說是最小頂點覆蓋。f[u][0]:
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目點擊開啟連結題意把1~n按逆時針順序排成一個圓圈,從1開始沒k個數字刪除掉一個,知道所有數字都刪完。求最後刪除的3個數。思路我們已經知道了,怎麼可以推出最後一個被刪除的編號(可參考百度百科)f(1) = 0, 表示最後還剩下一個時,這個編號為0f(n) = (f(n-1) + m) % n那麼儲存最後第1,2,3個數,一直推到第一個即可。代碼
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目點擊開啟連結題意:漢諾塔遊戲請看 百度百科正常的漢諾塔遊戲是只有3個柱子,並且如果有n個圓盤,至少需要2^n-1步才能達到目標。但是在這題中,有4根柱子,並且按照下面規則來玩:1. 先把圓盤頂部前k個盤子全部搬到第四根柱子上,2. 然後把剩下的n-k個盤子在前3根柱子中按照經典的規則搬到某個柱子上(假設是a柱),3.
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目連結: 點擊開啟連結題目大意某校有n個教師和m個求職者,已知每人的工資和能教的課程集合,要求支付最少的工資使得每門課都至少有兩名教師教學。在職教師必須招聘。思路這題不太好想,搞了很久。。f[s1][s2]: s1表示課程集合{ s1 }都至少有一個教師教的情況。 s2表示課程集合{ s2 }都至少有兩個教師教的情況。每個求職者的pi, 對於每個求職者,要麼選,要麼不選,就是01背包問題。
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目傳送門題意:你最初只有一個武器,你需要按照一定的順序消滅n個機器人(n<=16)。每消滅一個機器人將會得到他的武器。每個武器只能殺死特定的機器人。問可以消滅所有機器人的順序方案總數。思路:看到了n的規模這麼小,就知道可以用狀態壓縮解決了。f[s]表示狀態為{s}時的方案總數.我們設{s-1}是s狀態把一個二進位位是1的變為0的所有情況,相當於集合中少了某個機器人的所有情況那麼f[s] = sum{
Time of Update: 2018-12-05
題目連結:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=2515題目大意:給一個矩陣,要求在上面填上A到Z的字母,使得每個格子的字母與其相鄰格子的字母不同。思路:直接按照從左至右,從上到下的順序,一個格子一個格子地填。每個格子從A~Z枚舉,看哪個符合條件就填上。然後直接輸出即可。#include&
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目傳送門題意:給一個相上面的圖。要求從第一層走到最下面一層,只能往左下或右下走,經過的數字之和為sum。問有多少條路徑之和剛好等於S? 如果有的話,輸出字典序最小的路徑。思路:f[i][j][k] 代表從(i,j)點往下走到最後一層和為k的方案數那麼,顯然可以得到狀態轉移:f[i][j][k] = f[i+1][left][k-val] + f[i+1][right][k-val], val=(i,j)格上的數字,
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目來源: 點擊開啟連結題意(摘自LRJ《訓練指南》)手機在蜂窩網路中的定位是一個基本問題。假設蜂窩網路已經得知手機處於c1,
Time of Update: 2018-12-05
題目連結:小希的迷宮:http://acm.hdu.edu.cn/showproblem.php?pid=1272Is It A Tree:http://acm.hdu.edu.cn/showproblem.php?pid=1325題目類型: 並查集題目:A tree is a well-known data structure that is either empty (null, void, nothing) or is a set of one or more nodes
Time of Update: 2018-12-05
#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<iostream>using namespace std;typedef struct work{ int day,fine,order; double cc;} work;work job[1010];int cmp(const work &a, const
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目連結: 點擊開啟連結題目大意給一個字串,要求添加最少個字元,把它變成迴文串,並輸出。思路簡單的區間dp,f(i, j) 表示區間(i, j) 內的字串添加的最少個數,變成迴文串那麼, 如果str[i]==str[j], f(i, j) = f(i+1, j-1) + 1f(i, j) = min{f(i+1, j), f(i, j-1)} +
Time of Update: 2018-12-05
548 - Tree460628.96%97477.21%題目連結:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=104&page=show_problem&problem=489題目類型: 資料結構, 二叉樹題目大意:給兩個組數字,都是在同一棵二叉樹上的,第一組是按中序遍曆(inorder)順序輸出的,第二組是按後序遍曆(postorder)輸出的,
Time of Update: 2018-12-05
本文出自 http://blog.csdn.net/shuangde800題目連結: 點擊開啟連結題意有n個倉庫,讓m個人來看管。一個倉庫只能由一個人來看管,一個人可以看管多個倉庫。每個人有一個能力值pi,如果他看管k個倉庫,那麼所看管的每個倉庫的安全值為 pi/k(向下取整)如果某個倉庫沒有人看管,那麼它的安全值為0。所有倉庫的安全值L = min{ 每個倉庫的安全值
Time of Update: 2018-12-05
連結:http://acm.hdu.edu.cn/showproblem.php?pid=3724題目:Encoded BarcodesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1022 Accepted Submission(s): 337Problem DescriptionAll the big malls need