題目:
奶牛們打算通過鍛鍊來培養自己的運動細胞,作為其中的一員,貝茜選擇的運動方式是每天進行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,最後...