題意比較簡單,兩個人拿偶數張卡片,要麼拿當前的最左邊,要麼拿最右邊,盡量拿大的,拿完後求第乙個人拿的卡片數字總和減去第二個人卡片的數字總和,求最大差值。
剛開始寫記憶化搜尋,參考了一下別人的**,但是還有乙個地方不太明白,就是當第乙個人拿右邊的時候,為什麼寫成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 ...