POJ 2738 Two Ends 記憶化搜尋

2021-06-23 05:03:32 字數 656 閱讀 9491

題意比較簡單,兩個人拿偶數張卡片,要麼拿當前的最左邊,要麼拿最右邊,盡量拿大的,拿完後求第乙個人拿的卡片數字總和減去第二個人卡片的數字總和,求最大差值。

剛開始寫記憶化搜尋,參考了一下別人的**,但是還有乙個地方不太明白,就是當第乙個人拿右邊的時候,為什麼寫成num[x]<=num[y-1]會wa(⊙o⊙)…

求指教額。。。

#include #include#include#include#include#include#define n 1100

using namespace std;

int num[n];

int dp[n][n];

int dfs(int x,int y)

{ int a,b;

if(dp[x][y]!=-1)

return dp[x][y];

if(x==y-1)

return dp[x][y]=abs(num[x]-num[y]);

if(num[x+1]>=num[y])//如果第乙個人選左邊,則比較左邊第二個和最後乙個大小,大的則為第二個人的選擇,求出差值

a=dfs(x+2,y)+num[x]-num[x+1];

else

a=dfs(x+1,y-1)+num[x]-num[y];

if(num[x]

poj1661Help Jimmy 記憶化搜尋

這是找的倒數第二簡單的,然而依舊不會,淚 昨天晚上調出來發現是 以示例為例 從倒數第二個平台直接跳下去 時間是0 從上面第乙個跳下去 時間依舊是0 orz 12點半躺床上頓悟應該每個平台的時間不僅是乙個,有左右兩個時間 唯一值得欣慰是發現了 dp值裡面不用加上高度下落的時間差,最後dp 下落的高度,...

skiing 記憶化深搜

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

HDU1501 Zipper(DFS 記憶化搜尋)

題意 給三個字串,保證第三個串長度是前兩個串長度之和,確定前兩個串保持原有的字母順序能不能拼成第三個串。思路 直接搜尋的話會有大量重複的運算,要用記憶化陣列記錄之前的結果。當匹配到第乙個串的第i位和第二個串的第j位時,前面可能有多種情況,但三個串後面的長度一定,所以結果也可以確定,用vis i j ...