金礦模型溫習

2021-05-27 08:32:24 字數 935 閱讀 5842

又從金礦模型開始了動態規劃,感覺理解又深了一點吧,因為今天刷題不是很順利,普通01揹包很好應付,可是今天見的總是tle,真是崩潰,同時也花費了大量時間在這上面,關於金礦模型的原文詳見:裡面也有參考**。

關於總結別人寫的很詳細了,就通過個人學習所得說一下我學習的時候感覺迷茫的地方。我在學dp的時候有一種感覺就是別人講的看懂了,但是自己動手寫程式時卻感覺無從下手,但是經過仔細分析之後慢慢就感覺有點思路了,就拿這個最簡單的01揹包型別的金礦模型題目來說吧,首先我最先想到的方法是遞迴,這個寫起來就比較簡單了,類似求n階乘的做法,第二就是一般方法,別人在講解的時候都說從最後乙個子結構開始向前推,可是具體應用到程式裡面該怎樣寫呢?這是我在學習的時候也曾遇到的,那我的做法就是:先把別人的程式走一遍,慢慢理解。下面解決我上面的提問:我們可以用乙個表示人數為i的s[i]陣列來表示當前能得到的最大金幣數,可以想象最後的s[maxpeople]就是所要求的答案,具體過程可以觀察程式,我覺得這個沒什麼說了,還是神馬都自己走一遍,下面附上關於金礦模型我理解的程式,有興趣的可以拷到自己編譯器裡除錯一下,看看其中的過程,以幫助理解:最後總結一句:幾乎所有的01揹包型別的dp轉移方程都是上面所提到的轉移方程。 

#includeusing namespace std;

int max(int a,int b)

int main()

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

scanf("%d%d",&c[i],&w[i]);

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

for(j=v;j>=c[i];j--)

s[j]=max(s[j],s[j-c[i]]+w[i]);

printf("%d\n",s[v]);

} return 0;

由於我理解的還不夠深入,所以今天刷題時也遇到了種種困難,總是tle,很是鬱悶,明日計畫:dp經典題型---單調子串行

動態規劃 金礦模型

問題描述 有people個人和 num個金礦,開採 每個金礦都需要i people個人,可以獲得i getgold個金子,並且用過的人不可以重複使用,問從這 num個金礦中最多可以得到多少個金子 輸入輸入第一行有兩個數,第乙個是用來開採金礦的總人數,第二個是總金礦數。輸入檔案的第2至n 1行每行有兩...

linux top命令溫習

1.作用 top命令用來顯示執行中的程式程序,使用許可權是所有使用者。2.格式 top d delay q c s s i n 3.主要引數 d 指定更新的間隔,以秒計算。q 沒有任何延遲的更新。如果使用者有超級使用者,則top命令將會以最高的優先序執行。c 顯示程序完整的路徑與名稱。s 累積模式,...

年後小溫習

過年放假15天,還有幾天就上班了,所以決定先小小的溫習一下。1.set設定器 void setabc int bool nsstring.aabc void指無返回值型別 get訪問器 int bool nsstring.getabc 2.用animate使sprite消失 id delete cc...