UVA 10559 Blocks 記憶化搜尋

2021-07-04 17:44:13 字數 773 閱讀 3183

依然在dp中掙扎的我。。今天聽隊友仔細的講了記憶化搜尋與dp的差別 才恍然大悟,01揹包之所以可以寫成迴圈的形式,是因為在求解下一狀態的最優解時,前面的狀態已經解決,但記憶化搜尋解決的問題型別,是子問題與總問題有相類似的結構,因此需要層層遞迴至最底層才能求解。

題意就是消除方塊嘛,得分是個數的平方。。然後這個狀態。。是i-j右邊拼上k個能得到的最大得分,剛開始我是迴圈寫的,樣例過了但是wa了,後來改的記憶化搜尋,預處理每個方塊向左延伸的長度,每個狀態有兩種決策,直接消去,和 右邊拼上幾塊再消去。

#include #include #include #include #include #include using namespace std;

const int maxn = 205;

int t,n,a[maxn],dp[maxn][maxn][maxn],p[maxn],cases=0;

int solve(int i,int j,int k)

int main()

p[i]=last;

}// for(int j=1;j<=n;j++){

// for(int i=1;i<=j;i++){

// for(int k=0;k<=n-j;k++){

// dp[i][j][k]=dp[i][p[j]-1][0]+(j-p[j]+k+1)*(j-p[j]+k+1);

// for(int q=1;q

uva 10118 免費糖果 深搜 記憶化搜尋

uva 10118 include include define n 45 define c 22 int max int a,int b int pile 4 n f n n n n n,top 4 int dfs int s,int hash c if s 5 籃子滿了,末狀態 return f...

skiing 記憶化深搜

這道題就是找出一條最長連續遞減序列,並求出其長度。可以用記憶化深搜,求出每一點最長序列的長度,然後求最大值即可。如下 include includeusing namespace std const int n 105 int a n n m,n,f n n inline int max int a...

uva 116 (記憶化搜尋)

題意 如圖,從左到右走,每次可以往左上 up 左 fo 左下 dn 走,當走到第一行或最後一行時可以如圖穿越。求一條權值最小的路徑,並列印字典序最小的路徑。解析 狀態轉移方程 dp i j min dp i 1 m m j 1 up dp i j 1 fo dp i 1 m j 1 dn 字典序最小...