Lightoj 1084 記憶化搜尋(DP)

2021-06-19 02:13:33 字數 871 閱讀 7874

dfs(cur) 表示從cur開始最少能分多少組

然後next是 使cur到next最大 

然後

if( next - cur >= 3 )

if( next - cur >= 4 )

if( next - cur >= 5 )

這三個判斷是說 可以  分乙個給後面  或者分兩個給後面  或者乙個都不給後面  來組成新的小組 

然後就a啦~~~~

ac**如下:

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

#define max 0x3f3f3f3f

int dp[100010];

int k, n;

int pos[100010];

int dfs( int cur )

if( dp[cur] != -1 )

int next = upper_bound( pos, pos + n, pos[cur] + k ) - pos;

int ans = max;

if( next - cur >= 3 )

if( next - cur >= 4 )

if( next - cur >= 5 )

return dp[cur] = ans;

}int main()

sort( pos, pos + n );

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

int ans = dfs( 0 );

if( ans < max )else

} return 0;

}

Lightoj 1071 記憶化搜尋

題目的意思是說 在乙個二維的方格中有一些人需要幫助,你需要從左上角走到右下角,然後再返回左上角,而且每次走的不能重複,向下的時候只能向下或向右走,返回的時候只能向上或向左走,求最多能救的人數。這一題簡化一下就是要找兩條從左上到右下的路,且兩條路不能相交。可以用記憶化搜尋。用dp step r1 r2...

lightoj 1173 記憶化搜尋

題目的意思是有n個公升高不同的人,求高矮間隔排列的數目,並且依據題目的意思,隊長肯定在第乙個。然後這一題可以這樣想 a1 a2 a3 a4 a5.ak 表示已經排列好了的人,然後還有n個人 那麼用 dp n m 1 來表示 排剩下的n個人,並且這n個人中有m個人比ak高,且接下來排的第乙個人要比ak...

skiing 記憶化深搜

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