一道想了很久做了很久很久的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率不高,...