動態規劃 Problem H

2021-07-12 02:49:04 字數 1162 閱讀 4073

動態規劃—problem h

題意 穿過幽谷意味著離大魔王lemon已經無限接近了!可誰能想到,yifenfei在斬殺了一些蝦兵蟹將後,卻再次面臨命運大迷宮的考驗,這是魔王lemon設下的又乙個機關。要知道,不論何人,若在迷宮中被困1小時以上,則必死無疑!可憐的yifenfei為了去救mm,義無返顧地跳進了迷宮。讓我們一起幫幫執著的他吧!命運大迷宮可以看成是乙個兩維的方格陣列,如下圖所示:

一開始在左上角,目的當然是到達右下角的大魔王所在地。迷宮的每乙個格仔都受到幸運女神眷戀或者痛苦魔王的詛咒,所以每個格仔都對應乙個值,走到那裡便自動得到了對應的值。現在規定yifenfei只能向右或者向下走,向下一次只能走一格。但是如果向右走,則每次可以走一格或者走到該行的列數是當前所在列數倍數的格仔,即:如果當前格仔是(x,y),下一步可以是(x+1,y),(x,y+1)或者(x,y*k) 其中k>1。

為了能夠最大把握的消滅魔王lemon,yifenfei希望能夠在這個命運大迷宮中得到最大的幸運值。

題意概括為:

給你一幅地圖,行走的時候可以有三種走法, 如果當前格仔是(x,y),下一步可以是(x+1,y),(x,y+1)或者(x,y*k) 其中k>1。問你從a[1][1]走到a[n][m]即從左上角走到右下角能夠得到的最大值。

解題思路

明白題意後,關鍵就是抽象問題,尋找狀態轉移方程,

第一行:

dp 1 ][ j ]=dp[ 1 ][ j ] + max //前提是在j能被k整除的前提下

第二行 ——第n行

dp[ i ][ j ]=dp[ i ][ j ] + max

通過這兩種狀態轉移方程求解即可。

感想 一開始沒有想到負數的情況,全部初始化為0去了,由於考慮到負數,所以初始化為乙個很大的負數。

ac**

#include

using

namespace

std;

#define inf -123456789

int dp[22][1003];

int max(int a,int b)

int main()

cout

0;}

動態規劃 什麼是動態規劃?

先來看看 資訊學奧賽一本通第5版 是怎麼說的 動態規劃程式設計是對解最優化問題的一種途徑 一種方法,而不是一種特殊演算法。不像前面所述的那些搜尋或數值計算那樣,具有乙個標準的數學表示式和明確清晰的解題方法。動態規劃程式設計往往是針對一種最優化問題,由於各種問題的性質不同,確定最優解的條件也互不相同,...

mysql動態規劃 動態規劃

動態規劃 能夠動態規劃的問題具有以下特點 可分解成規模更小的子問題 子問題的結果可復用 關鍵是要理解狀態轉移方程的含義就好啦!數字三角形 問題描述 在數字三角形尋找從頂到底的路徑,使得路徑經過的數字之和最大。規定每一步只能往左下或右下走,求出最大路徑和。遞迴解法 include include us...

《動態規劃》 ACM 動態規劃例題詳解

描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 圖1 圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。注意 路徑上的每一步只能從乙個數走到下一層上和它最近的左邊的那個數或者右邊的那個數。輸...