USACO 貝茜的晨練計畫

2021-09-30 14:06:43 字數 1539 閱讀 8839

題目:

奶牛們打算通過鍛鍊來培養自己的運動細胞,作為其中的一員,貝茜選擇的運動方式是每天進行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個整數,表示在滿足所有限制條件的情況下,貝茜能跑的最大距離。

比賽時神速想到dp

a了樣例後就沒理了

(一般dp題我都不抱有什麼希望)

沒想到分數下來

ac!!!

我和我的小夥伴們都驚呆了...

我們用f[i,j]表示奶牛跑了i分鐘,疲勞值為j所能跑到的最遠距離

如果j=0那麼往前找

把f[i,j]賦值為f[i-k,k](設k表示休息了k分鐘)

j!=0的話

f[i,j]=max(f[i,j],f[i-1,j-1]+a[i]);

標程:

var     f:array[0..10000,0..500]of longint;

d:array[0..10000]of longint;

n,m,i,j,k,l,s,x:longint;

function

max(a,b:longint):longint;

begin

if a>b then

exit(a) else

exit(b); end;

begin

readln(n,m);

for i:=1

to n do

readln(d[i]);

for i:=1

to n do

for j:=0

to m do

begin

if j=0

then

for k:=0

to m do

if i-k>=0

then

begin

f[i,j]:=max(f[i,j],f[i-k,k]);

f[i,j]:=max(f[i,j],f[i-k,0]);

end;

if j>0

then

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

end;

writeln(f[n,0]);

end.

u025 貝茜的晨練計畫

time limit 1 second memory limit 128 mb 奶牛們打算通過鍛鍊來培養自己的運動細胞,作為其中的一員,貝茜選擇的運動方式是每天進行n 1 n 10,000 分鐘的晨跑。在每分鐘的開始,貝茜會選擇下一分鐘是用來跑步還是休息。貝茜的體力限制了她跑步的距離。更具體地,如果...

動態規劃特訓 貝茜的晨練(多狀態轉移)

解題思路 影響最終跑多少公尺的是分鐘和疲勞度這兩個參量,很明顯,這是乙個二維dp的狀態轉化問題。dp i j 記錄該狀態下能跑的最大公尺數,其中i表示第i分鐘,j表示疲勞度數。注意邊界條件,設定dp n 1 j 為負無窮,dp n 1 0 為0,表示第n 1秒疲勞度必須為0時整個狀態值才為0,只有這...

貝茜的飛行路線

題目 題目描述 奶牛貝茜想到乙個更溫暖的地方去度過這個寒冷的冬天。不幸的是,她發現只有一家名叫ab的航空公司願意把票賣給奶牛,而且這些票的構成很奇怪。ab有n架飛機,每架都有乙個特定飛行路線,這個飛行路線包含2個或更多的城市。例如,一架飛機的路線可能是從城市1開始,然後飛到城市6,再飛到城市2,最後...