如果累了的话,不妨看一下超可爱的漫画吖

来源:伯乐专栏作者/玻璃猫,微信公众号 - 梦见

主页君小提示:图文有点长,慢慢看,做好防查颓措施

Z16pa8.jpg
Z169IS.jpg
Z16mZV.jpg
Z16QG4.jpg
Z168MR.jpg
Z16NdK.jpg
Z16Bzd.jpg

问题

现在有$10$级台阶,要求从第一阶向上走,每一次可以走一步或走两步,求有多少种不同走法。

比如说我们可以一阶一阶的走,一共走10步。这是一种走法。

就像这样:

Z1gu34.jpg

再或者我们可以两步两步的走,一共5步。就像这样:
Z1g28g.jpg

当然啦,除此之外,还有很多种走法……

Z121zQ.jpg

Z12Gss.jpg

Z12tZq.jpg

Z12Nd0.jpg

Z12diT.jpg

Z12rQJ.jpg
Z1TJOS.jpg
Z1T8Qf.jpg
Z1T3SP.jpg
Z1TlWt.jpg
Z1TGy8.jpg
Z1TyOU.jpg
Z1Tteg.jpg

第一种情况

Z1TNwQ.jpg

第二种情况

Z1blWR.jpg
Z1bdFH.jpg
Z1b3S1.jpg
Z1bQY9.jpg
Z1bMFJ.jpg
Z1b8Qx.jpg
Z1bJOK.jpg
Z1bGy6.jpg
Z1bHmT.jpg
Z1bo60.jpg
Z1bTXV.jpg
Z1bb0U.jpg

$F(0) = 0;$
$F(1) = 1;$
$F(2) = 2;$
$F(i) = F(i - 1) + F(i - 2)$

Z1qMB8.jpg
Z1qQHS.jpg
Z1qKnf.jpg
Z1qnjP.jpg
Z1qmct.jpg
Z1q1Ag.jpg
Z1q3NQ.jpg
Z1q8hj.jpg
Z1qHgI.jpg

int work(int i){
if(i == 0){
return 0;
}
else if(i == 1){
return 1;
}
else if(i == 2){
return 2;
}
else{
return work(i - 1) + work(i - 2);
}
}

Z1LMx1.jpg
Z1LK2R.jpg
Z1L1r6.jpg
Z1LuG9.jpg
Z1LnPJ.jpg
Z1LlKx.jpg
Z1L3qK.jpg
Z1LydS.jpg
Z1LsZ8.jpg
Z1L6Ig.jpg
Z1LBsP.jpg
Z1LDqf.jpg
Z1L2Gj.jpg
Z1LgiQ.jpg
(其实备忘录算法在OI上一般叫记忆化搜索)

Z1jDqx.jpg
Z1Omef.jpg
Z1OlWj.jpg
Z1Onw8.jpg
Z1OZOP.jpg
Z1OMFg.jpg
Z1O3Ss.jpg
Z1OQYQ.jpg

Z1jLWQ.jpg
Z1jqJg.jpg
Z1j7o8.jpg
Z1jbFS.jpg
Z1jOzj.jpg
Z1jjQs.jpg
Z1jvyn.jpg
Z1vnw6.jpg
Z1vmex.jpg
Z1vuTK.jpg
Z1vZO1.jpg
Z1vMFO.jpg

int work(int i){
int a[10001]
if(i == 0){
return 0;
}
else if(i == 1){
return 1;
}
else if(i == 2){
return 2;
}
int a = 1;
int b = 2;
int temp = 0;
for(int i = 3; i <= n; i ++){
temp = a + b;
a = b;
b = temp;
}
return temp;
}

Z1xkAf.jpg
Z1xCnI.jpg
Z1xScd.jpg
Z1vz1H.jpg
Z1xpjA.jpg
Z1xiHP.jpg
Z1xPBt.jpg

问题

有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。

参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。

要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿?

ZGHN1s.jpg
ZGHaXq.jpg
ZGHtpj.jpg
ZGHJhQ.jpg
ZGHUcn.jpg

每一座金矿都有挖与不挖两种选择,如果有N座金矿,排列组合起来就有2^N种选择。

对所有可能性做遍历,排除那些使用工人数超过10的选择,在剩下的选择里找出获得金币数最多的选择。

代码比较简单就不展示了,时间复杂度也很明显,就是O(2^N)。

ZGH2cR.jpg
ZGHIAO.jpg
ZGHc9J.jpg
ZGHhB6.jpg
ZGHg39.jpg
ZGHRj1.jpg
ZGHfnx.jpg
ZGH4HK.jpg

ZGHT4e.jpg
ZGHXut.jpg
ZGHqgA.jpg
ZGHH9H.jpg
ZGHb3d.jpg
ZGHLjI.jpg
ZGHjDP.jpg
ZGHvHf.jpg

ZGbAuq.jpg
ZGbFvn.jpg
ZGbP3j.jpg
ZGbCCQ.jpg
ZGbigs.jpg

F(n,w) = 0 (n<=1, w < p[0]);

F(n,w) = g[0] (n==1, w >= p[0]);

F(n,w) = F(n-1,w) (n>1, w < p[n-1])

F(n,w) = max(F(n-1,w), F(n-1,w-p[n-1])+g[n-1]) (n>1, w >= p[n-1])

ZGb8Dx.jpg
ZGbGb6.jpg
ZGb3K1.jpg

ZGbtUO.jpg
ZGbN5D.jpg
ZGbaPe.jpg
ZGbYVK.jpg
ZGbd8H.jpg
ZGbDKI.jpg
ZGbw2d.jpg
ZGb0xA.jpg

ZGbIrq.jpg
ZGbRPg.jpg
ZGbgIS.jpg
ZGb5Mn.jpg
ZGbca8.jpg
ZGbf2j.jpg
ZGbhxs.jpg
ZGboq0.jpg

ZGbbIU.jpg
ZGbHaT.jpg
ZGbXRJ.jpg
ZGbLiF.jpg
ZGb7ZV.jpg
ZGbxMR.jpg
ZGbOG4.jpg
ZGbjz9.jpg

ZGqPIO.jpg
ZGq9Z6.jpg
ZGqCdK.jpg
ZGqkJe.jpg
ZGqFiD.jpg
ZGqZQA.jpg
ZGqARH.jpg
ZGqEzd.jpg

ZGqMo8.jpg
ZGqueP.jpg
ZGq8zj.jpg
ZGqmLt.jpg
ZGqKdf.jpg
ZGqlFS.jpg
ZGq1Jg.jpg
ZGq3WQ.jpg

ZGqtLq.jpg
ZGqYyn.jpg