沒聽說過二維dp前根本想不出來啊!!!!
下面附上老師結合本題對二維dp講解:
通常而言,如果用1個整數狀態的方程 寫不出來,就用2個整數,也就是公升維
•2個寫不出來,就用3個,以此類推
•但是公升維會嚴重消耗時空,通常需要 結合資料範圍來進行判定:
•到底是應該公升維還是需要尋找更巧妙 的狀態表示與規劃目標
•在接餡餅這道題中,餡餅的數量顯然 與位置也有關
•因此這道題的狀態要用2個數表示,目 標記作dtx,dtx表示在t時刻、x位置能 夠接到的最大數量
#include
#include
#include
#include
#define maxn 100010
using namespace std;
int dp[maxn][12
],pile[maxn][12
];///全域性變數和靜態變數的儲存區域是在一起的,程式結束後由系統釋放。資料區的大小由系統限定,一般很大。
intmax_is
(int a,
int b,
int c)
;int
main()
for(i=
1;i<=
11;i++
) dp[maxt]
[i]=pile[maxt]
[i];
//移動結束的時候的時間總是最晚的那個餡餅落下的時間
for(i=maxt-
1;i>=
0;i--
)//最晚時刻在上面迴圈的初始化好了,從最晚時刻前面一秒開始dp到時間為0的地方,即dp
}printf
("%d\n"
,dp[0]
[5])
;}return0;
}int
max_is
(int a,
int b,
int c)
到這篇部落格,我半個月刷的代表性題目也貼完了,最後還是因為種種原因 (就是菜) 放棄了acm。
其實做這些題大部分都參考了別人的思路和**,甚至有些就是理解後再揹著敲出來的,但還是會有些錯誤自己debug了很久,綜上感覺可能自己真的不太適合acm吧,但每次ac帶來的感動我也體驗過了hhhh。以後還是會有演算法題的部落格的,當然可能都會是些不太難比較適合非acmer的演算法題了,我也會保持我的帶有自我理解的詳細注釋的(雖然自己感覺清楚,但是可能別人都看不懂我再說啥hhhh,表達也是門功夫啊),業餘刷刷簡單演算法也不錯嘛。就醬,再見。
hdu 1176 免費餡餅 二維dp
設a i j 為第i秒的j位置掉下的餡餅數量,f i j 為第i秒在j位置接餡餅最多可以接到的最多餡餅數量。由於每秒只能移動乙個位置,因此這一狀態可能由三種情況達到 f i 1 j 1 f i 1 j f i 1 j 1 這三種情況中的最大值加上當前位置可以接到的餡餅數即是當前位置可以接到的最大餡餅...
HDU 1176 免費餡餅 二維dp
都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。說來gameboy的人品實在是太好了,這餡餅別處都不掉,就掉落在他身旁的10公尺範圍內。餡餅如果掉在了地上當然就不能吃了,所以gameboy馬上卸下身上的揹包去接。但由於小徑兩側都不能站人,所以他只能在小徑上接...
hdu 1176 免費餡餅 dp
去年暑假的時候就看到這個題了,當時太菜了。完全不知道做。今天看到了網上的hdu dp46題,準備暑假前把這46個題搞了,正好看到了這個免費餡餅,怒a之。狀態轉移方程 dp i j max dp i j max dp i 1 j max dp i 1 j 1 dp i 1 j 1 v i j 其中dp...