1.洛谷p1244青蛙過河
lgp1244青蛙過河
動態規劃
狀態表示:dp[i][j]表示石墩數量為i,荷葉數量為j時能夠走過青蛙的數量。
狀態轉移:
因為青蛙在石墩上必須按照漢諾塔的形式排列。所以要從起點走到終點,必須要讓編號最大的青蛙,先跳過去。為了這個目的,我們需要把編號最大的青蛙上面的青蛙全部挪開。那麼,當i=0,j=k時,
因為只能有k個青蛙先跳到荷葉上,所以能通過的青蛙數目為k(荷葉上的青蛙)+1(起點處的青蛙),即
dp[0][k]=k+1;接下來我們考慮當i=1,j=k時的情況:可以想象成是起點變成了兩個石墩。那麼由於乙個石墩上可以放置k+1個青蛙,兩個石墩就可以放置(k+1)*(1<<1)個青蛙。以此類推可得狀態轉移方程:
#include
using
namespace std;
typedef
long
long ll;
ll dp[
3200][
3200];
ll h,k;
intmain()
先別急著抄**,讓我們繼續向下分析:
dp[i][j]=dp[i-1][j]2=4dp[i-2][j]=8*dp[i-3][j]……
易得 dp[i][j]=dp[0][k]*2^h
由此可得
#include
using
namespace std;
typedef
long
long ll;
ll h,k;
intmain()
2.洛谷p1676神奇的四次方數
洛谷p1676神奇的四次方數
完全揹包問題
狀態表示:dp[j]代表需要拼出的元素為j時,所需的最少的數字數。
狀態轉移:如果把每個數的四次方看成完全揹包問題中的體積,把取數的數量看成價值。那麼這個問題就變成了乙個完全揹包問題(題中沒有說這n個四次方數不可以相同)。套用完全揹包可得狀態轉移方程:(完全揹包問題在屬性為min的形況下時一定會填滿的)
#include
#include
#include
#include
#include
using
namespace std;
int m;
const
int m=
110000
;int dp[m]
;int v[m]
;int
main()
} cout<
}
訓練日記 20161024
初賽好像不會掛了,好開心!版權原因,不上傳題目。題意 求1 n n 1000 的排列中逆序對恰好為 k 個的排列數目。多測。題解 f i j 表示前 i 個數,逆序對個數恰好為 j的排列個數,易得轉移方程f i j i 1k 0f i 1 j k 用字首和優化可使複雜度降為o n2 題意 對於乙個長...
訓練日記 20170324
長久不更新部落格了。期間經歷了恰好被ag線踩的wc,經歷了漫長痛苦的小高考準備。現在終於可以重整旗鼓,向省選進發!幾個月來,唯一不變的是我仍然是個超級蒟蒻 版權原因,不上傳題目。題意 最小樹形圖 去年就接觸 聽說 過的演算法,一直沒有真正寫過。因為各種奇怪的細節錯誤,調了好幾個小時 比如找環時沒有判...
訓練日記 20170328
今天的題目似乎很水 好多人都提前ak離場了,於是提前一小時收題。但是我還是各種不會。思維江化?話說,聽到一句很有趣的話 山不在高,有林則徐 水不在深,有江 題意 給定一棵有n n 105 個節點的有根樹,編號互不重複。詢問有多少棵子樹內節點編號構成乙個連續區間。題解 水題,對於每個節點 i 記錄以該...