YCOJ黑熊過河

2021-09-10 22:17:18 字數 1306 閱讀 5087

description

有乙隻黑熊想過河,但河很寬,黑熊不會游泳,只能借助河面上的石墩跳過去,他可以一次跳一墩,也可以一次跳兩墩,但是每起跳一次都會耗費一定的能量,黑熊最終可能因能量不夠而掉入水中,所幸的事,有些石墩上放了一些食物,這些食物可以給黑熊增加一定的能量,問黑熊能否利用這些石墩安全的抵達對岸,若能,則計算出抵達對岸後剩餘能量的最大值是多少?

input

第一行包含兩個整數p(黑熊的初始能量),q(黑熊每次起跳時耗費的能量),(0≤p,q≤1000);

第二行只有乙個整數n(1≤n≤10^610

6 ),即河中石墩的數目;

第三行有n個整數,即每個石墩上食物的能量值ai(0≤ai≤1000)。

output

輸出檔案包括一行,若黑熊能抵達對岸,輸出抵達對岸後剩餘能量的最大值是多少,若不能抵達對岸,則輸出「no」。

sample input 1

12 5

50 5 2 0 7

sample output 1

6

明眼人們一眼就可以看出這道題是一道dp,可如果只能走1步,那麼這道題會簡單許多,但為了攔住oier們,他偏偏可以走1步或兩步。

算了算了,含著淚也要寫這道題。

那現在該怎麼辦呢?

那我們先來畫個圖理解一下吧。

這樣看起來,這題感覺也不是很難,但要注意的是,中途熊的能量是可能小於0的,所以那是後就要給dp[i][j]賦乙個極小值,不然中途又吃活了怎麼辦?

源**(附贈注釋):

#include using namespace std;

int dp[10010],a[10010];

int main()//輸入

dp[0]=p;

dp[1]+=dp[0]-q;

if (dp[1]<=0)//如果開頭都跳不過去,就直接return。

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

if(dp[i-2]-q>=0)

if (sb)//如果它掉到水裡去了,就賦乙個極小值,不能讓他吃詐屍了。

}else

} dp[n]-=q;

if (dp[n+1]<=0)else//判斷一下,可憐的熊是否還活著

return 0;

}

YCOJ裝載問題 load

description 有一批共n個貨櫃要裝上艘載重量為c的輪船,其中貨櫃i的重量為wi。找出一種最優裝載方案,將 輪船盡可能裝滿,即在裝載體積不受限制的情況下,將盡可能重的貨櫃裝上輪船。input 第一行有2個正整數n和c。n是貨櫃數,c是輪船的載重量。接下來的1 行中有n個正整數,表示貨櫃的重量...

YCOJ組合 判斷素數

description 已知 n 個整數b1,b2,bn 以及乙個整數 k k n 從 n 個整數中任選 k 個整數相加,可分別得到一系列的和。例如當 n 4,k 3,4 個整數分別為 3,7,12,19 時,可得全部的組合與它們的和為 3 7 12 22 3 7 19 29 7 12 19 38 ...

拯救黑熊,拒食熊膽

上週到四川的黑熊救護中心參觀並參與捐款,感觸很深,為了取得熊膽,這些養熊廠對黑熊實施著慘絕人寰的活體抽取熊膽的暴行,令人髮指。這些可憐的黑熊被救出來後在救護中心生活的很好,但是,全國還有7000多頭黑熊仍然還在受著如此的殘害,在這裡呼籲大家關心這個專案,提供從精神到物質的捐助,加入到黑熊拯救計畫中來...