546 移除盒子(難) 8月15日

2022-09-12 18:54:12 字數 1890 閱讀 3335

546. 移除盒子

一種想法是深搜遞迴。選擇當前盒子中任意乙個,刪除相同顏色並且連續的盒子後將剩餘的盒子繼續遞迴選擇並刪除。這樣直接計算的話複雜度太高了,需要記憶化儲存搜尋過程來降低複雜度。還沒想到合適的。。

另一種想法是動態規劃。n個盒子的最大積分和由n-1,n-2,...1個盒子的積分決定:也似乎不方便

還有一種是反向思維,去掉盒子的逆過程是插入盒子??

設定指標l,r

如果f(l,r)表示l到r區間內的最大積分,那麼f(l,r)經過如下遞推而得:去除從l位置開始的連續相同元素,假設k個,那麼f(l+k-1,r)+k*k;找到第乙個與l位置元素相同但不相鄰的元素,假設位置在j,那麼f(j+1,r)+f(l+k,j-1)+(k+1)^2;再找第二個與l位置元素相同但不相鄰的元素,這時需要考慮這個不相鄰的元素是否與前面找到的不相鄰元素相鄰,該元素是直接與l元素塊作為鄰居去掉還是加上第乙個不相鄰元素三個一起作為鄰居去掉。。。似乎並不便於分析

如果多乙個引數f(l,r,k)表示考慮上l左側有k個與l元素相同的元素,l到r區間內的最大積分。這樣可以方便的進行遞迴分析,f(l,r,k)計算如下:f(l+1,r,0)+(k+1)^2;找到l右側第p個與l元素相同的位置j,f(jp,r,k+1)+f(l+1,jp-1,0)。以上多個表示式的最大值,可以用三維陣列記憶化遞迴路徑。如此遞迴終止條件是:f(n,n,k) = (k+1)^2;或者f(n,n-1,0) = 0;

class

solution

else

if(l>r)

else

else

j++;

}memorymatrix[l][r][k] = max(tempmax,dps(l,l,k,boxes)+dps(l+1,r,0

,boxes));

//if(l==1&&r==7)cout

memorymatrix[l][r][k];}}

}int removeboxes(vector&boxes)

memorymatrix.push_back(temp1);

}//dps(0,numboxes-1,0,boxes);

//return 0;

return dps(0,numboxes-1,0

,boxes);

}};/*

一種想法是深搜遞迴。選擇當前盒子中任意乙個,刪除相同顏色並且連續的盒子後將剩餘的盒子繼續遞迴選擇並刪除。這樣直接計算的話複雜度太高了,需要記憶化儲存搜尋過程來降低複雜度。還沒想到合適的。。

另一種想法是動態規劃。n個盒子的最大積分和由n-1,n-2,...1個盒子的積分決定:也似乎不方便

還有一種是反向思維,去掉盒子的逆過程是插入盒子??

設定指標l,r

如果f(l,r)表示l到r區間內的最大積分,那麼f(l,r)經過如下遞推而得:去除從l位置開始的連續相同元素,假設k個,那麼f(l+k-1,r)+k*k;找到第乙個與l位置元素相同但不相鄰的元素,假設位置在j,那麼f(j+1,r)+f(l+k,j-1)+(k+1)^2;再找第二個與l位置元素相同但不相鄰的元素,這時需要考慮這個不相鄰的元素是否與前面找到的不相鄰元素相鄰,該元素是直接與l元素塊作為鄰居去掉還是加上第乙個不相鄰元素三個一起作為鄰居去掉。。。似乎並不便於分析

如果多乙個引數f(l,r,k)表示考慮上l左側有k個與l元素相同的元素,l到r區間內的最大積分。這樣可以方便的進行遞迴分析,f(l,r,k)計算如下:f(l+1,r,0)+(k+1)^2;找到l右側第p個與l元素相同的位置j,f(jp,r,k+1)+f(l+1,jp-1,0)。以上多個表示式的最大值,可以用三維陣列記憶化遞迴路徑。如此遞迴終止條件是:f(n,n,k) = (k+1)^2;或者f(n,n-1,0) = 0;

*/

8月15日小練

csust練習5 a n hdu 1042 n的階乘,大數相乘,這裡的n 10000,故可以用陣列不用字串。1546ms 1 include 2 include 3 using namespace std 4int a 40000 5 intmain 615 a 0 1 0 記錄陣列的長度 16 a...

8月15日訓練筆記

今天印象最深的就是所做的下午比賽題了吧,做了一下午,補了乙個晚上,還有兩個題目沒處理完。今天的題目稍難一點,但其實回過頭來仔細想想,真的難嗎?萬變不離其宗,考察的我們還是最基礎的知識點。先說最後乙個題目,做的時候讀了遍題目看了一遍,開始有點慌,後來還是靜下心來,動手去寫了寫,突然發現了規律,我覺得這...

20120815,微軟8月15日發布9個安全補丁

微軟於北京時間8月15日清晨發布9個安全補丁,其中5個為最高端別嚴重等級,其餘4個為重要等級,共修復 microsoft windows,internet explorer,exchange server,sql server,server software,developer tools 和 of...