洛谷P1353 跑步Running

2022-05-16 07:27:17 字數 1086 閱讀 8714

奶牛們打算通過鍛鍊來培養自己的運動細胞,作為其中的一員,貝茜選擇的運動方式是每天進行n(1 <= n <= 10,000)分鐘的晨跑。在每分鐘的開始,貝茜會選擇下一分鐘是用來跑步還是休息。

貝茜的體力限制了她跑步的距離。更具體地,如果貝茜選擇在第i分鐘內跑步,她可以在這一分鐘內跑d_i(1 <= d_i <= 1,000)公尺,並且她的疲勞度會增加1。不過,無論何時貝茜的疲勞度都不能超過m(1 <= m <= 500)。如果貝茜選擇休息,那麼她的疲勞度就會每分鐘減少1,但她必須休息到疲勞度恢復到0為止。在疲勞度為0時休息的話,疲勞度不會再變動。晨跑開始時,貝茜的疲勞度為0。

還有,在n分鐘的鍛鍊結束時,貝茜的疲勞度也必須恢復到0,否則她將沒有足夠的精力來對付這一整天中剩下的事情。

請你計算一下,貝茜最多能跑多少公尺。

第1行: 2個用空格隔開的整數:n 和 m

第2..n+1行: 第i+1為1個整數:d_i

輸出1個整數,表示在滿足所有限制條件的情況下,貝茜能跑的最大距離

5 2534

210貝茜在第1分鐘內選擇跑步(跑了5公尺),在第2分鐘內休息,在第3分鐘內跑步(跑了4公尺),剩餘的時間都用來休息。因為在晨跑結束時貝茜的疲勞度必須為0,所以她不能在第5分鐘內選擇跑步

看出來是個動態規劃應該還是很簡單的吧......

設\(f[i][j]\)表示當前在第i分鐘,疲勞數為j時最長的距離。在每一分鐘,我們有兩種決策,一是往前跑,一是休息。直接翻譯題目意思,我們有如下狀態轉移方程:

\[f[i][j]=max(f[i-1][j-1]+d[i],f[i][j])\\

f[i+j][0]=max(f[i+j][0],f[i][j]),i+j<=n

\]特別地,我們有

\[f[i][0]=max(f[i][0],f[i-1][0])

\]

#include #include #include using namespace std;

int n,m,i,j,d[10002],f[10002][502];

int read()

return w;

}int main()

} cout

}

題解 洛谷P1806 跑步

有趣的水題 只有這麼幾篇題解,那就發一篇吧 這道題我講兩種方法 動規和打表!先講講有趣的打表吧!打表有什麼好說的嗎?有,記得開long long!還是直接上 吧!includeusing namespace std intn long long ans 501 intmain view code 想...

洛谷 P1600 天天愛跑步

題面就不貼上了 把每個玩家的路徑拆成一條到lca的路徑和從lca到終點的路徑 然後,使用樹上差分統計答案即可 那麼,樹上差分是什麼?差分的具體思想是,當某區間內某元素對答案有貢獻,就在區間起點打乙個 1 標記代表多出了乙個對答案有貢獻的元素,在終點打乙個 1標記代表乙個對答案有貢獻的元素在該位置 結...

洛谷P1600 天天愛跑步

樹上的題有點意思啊 這題我最開始的想法是 固定乙個觀測點i,能觀測到的一定是起點距離 i 為 w i 的點的子集合。問題是這個集合只有一部分的點會經過 i 點,就很煩。於是得換個思路,不放固定乙個跑步的人 x 觀察他對哪些觀察者 i 產生了貢獻。於是我們得到了公式,對於上公升階段的點來說,不妨設 s...