hdu 4597 dp 字首和 記憶化搜尋

2021-06-28 12:33:25 字數 696 閱讀 4309

dp[i][i+len1][j][j+len2] = sum[i][len1+i][j][j+len2] -min

因為每個人都足夠聰明,所以每個人作為先手時都會保證自己會得到最大受益,所以當前狀態下的最大收益就是區間總和減去轉換來的狀態裡收益最小的以獲得最大的收益,有一點博弈的思想,故用四維的陣列記錄狀態,然後用記憶化搜尋進行搜尋

#include #include #include #include #define max 27

#define inf 9999999

using namespace std;

int a[max];

int b[max];

int dp[max][max][max][max];

int sum1[max];

int sum2[max];

int sum[max][max][max][max];

int dfs ( int l1 , int r1 , int l2 , int r2 )

int main ( )

for ( int i = 1 ; i <= n ; i++ )

memset ( dp , -1 , sizeof ( dp ) );

printf ( "%d\n" , dfs ( 1 , n , 1 ,n ) );

}}

hdu4597Play Game 記憶化搜尋

兩堆數量為n n 20 的牌,每個牌都有份數 兩個人輪流拿牌,可以取兩堆數的頭或者尾中的一張 每個人都取最優解 問第乙個人能夠取得的最大分數 記憶化搜尋 dp sa ta sb tb 表示第一堆剩下sa,ta,第二堆剩下 sb,tb的最大值 include include includeusing ...

hdu 1069 記憶化搜尋 dp

題目鏈結 題意 有n種長方體,每個都有無數個,分別告訴你它們的長寬高,問最多能疊多高,要求是上面的長方體的地面積的長和寬都要比下面的長方體的小,長方體可以旋轉,就是說放的時候可以以任意一面作為底面積。思路 用a i j 來記錄第i種長方體的第j條邊的高,用dp i j 表示以第i個長方體為底且以第j...

hdu 1078 (dp記憶化搜尋)

題意 有乙個n n的方格,每個格仔有乙個價值,經過這個格仔就可以得到這個價值,每次可以橫著或者豎著一步最多走k格,並且每次走的格仔要比上乙個格仔的價值大,問現在從位置 1,1 走,最大可以獲得的價值.分析 記憶化搜素,dp i j 表示的是從位置 i,j 開始走可以獲得的最大價值。記錄下這些價值就可...