ZJUT1476 禮物放置 DP

2021-05-24 11:29:42 字數 1076 閱讀 2092

一道想了很久做了很久很久的dp題。

真真正正地算是自己做出來了,沒有參考任何東西。

開始的時候是要像以前的cash machine之類的題那樣記錄所有的情況,但是後來發現可能會有重複的現象。

之後打算開個二維陣列記錄,誰知道老是報rte。

直到今天,終於想出來了。

思路:開乙個一維陣列,記錄「差」的情況,同時記錄最大值。所謂的「差」,就是兩堆禮物的高度差。而最大值是指在這個差下能達到的最大高度。

比如第乙個資料:4 1 3 10。

開始把0設為已訪問,高度為-1。

讀入4,則差的情況增加了乙個,即是4。同時在差為4的情況下的相同高度值為0。

之後讀入1,差的情況增加了三個,有1(從0產生)、3、5(3和5均從4產生)。1的高度為0,而3的高度為1,5的高度為0。因為當兩堆一堆為0一堆為4時,增加1則可以變成(1、4)或(0、5),第一種情況差為3,高度為1;第二種情況差為5,高度為0。

如此類推,到最後0的高度即是所求答案。

為了避免對每乙份禮物增加後對後面的判斷產生干擾,需要新開乙個陣列記錄本次新增加的值。同時在本次迴圈結束後把該陣列裡的值增加到原陣列裡,並清空該陣列(這裡我用了vector)。

以下貼**:

#include

#include

using namespace std;

int maxh[5005],num[105];

bool visited[5005];

struct gift

;int getmax(int a, int b)

int main()

mid /= 2;

right = 0;

for (i=0; i<=mid; i++)

visited[0] = true;

maxh[0] = -1;

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

if (j-num[i]>=0)}}

for (j=0; jp.s.我說怎麼做這道題這麼累捏= =

14 7 新增職工

1 功能分析 用乙個陣列去儲存所有使用者新增的職工,但我們知道,陣列裡只能存放相同型別的元素。多型技術正好滿足的這一需求。例如,建立普通員工時可以這樣寫 worker worker new employee 建立經理時可以這樣寫 worker worker new manager 這樣,這個陣列裡儲...

ZJUT1266 大菲波數

寫了乙個大數加,一次ac。但是時間上感覺沒有優勢。對比了別人的,感覺有點遠。不知道是不是細節處理的問題。求優化。以下貼 include using namespace std char fp 1001 250 void add int a,int b,int c else for fp b i 0 ...

ZJUT1099 最少攔截系統

沒想到越來越順手 之前一直看別人做這道題,自己卻沒什麼idea。沒想到今天寫了一下,只測試了幾組資料,連修改都沒有就一次ac,而且time 9ms,memory 208k。值得慶幸一下 不過還是要繼續努力。昨天訂的演算法導論沒想到今天就到手了,很是快。贊一下 之後還要好好加油啊!這道題的ac率不高,...