P1023 奶牛的鍛鍊

2022-05-05 03:39:10 字數 1630 閱讀 4271

p1023奶牛的鍛鍊

usaco

奶牛bessie有n分鐘時間跑步,每分鐘她可以跑步或者休息。若她在第i分鐘跑步,可以跑出d_i公尺,同時疲倦程度增加1(初始為0)。若她在第i分鐘休息,則疲倦程度減少1。無論何時,疲倦程度都不能超過m。另外,一旦她開始休息,只有當疲憊程度減為0時才能重新開始跑步。在第n分鐘後,她的疲倦程度必須為0。

第一行,兩個整數,代表n和m。

接下來n行,每行乙個整數,代表d_i。

bessie想知道,她最多能跑的距離。

5 2 

5 3 

4 2 

10

9
n <= 2000 , m <= 500 , d_i <= 1000

vivian snow

廣東汕頭聿懷初級中學noip第一次訓練用題

用f(i,j)表示第i分鐘結束,疲勞值為j的最遠距離

有三種轉移的情況:

1.這分鐘跑動,即f[i,j]:=f[i-1,j-1]+d[i];

2.上一分鐘已經歇息到0了,但這一分鐘我不跑,依然歇息,即:f[i,0]:=f[i-1,0];

3.這一分鐘在歇息,從前面的某乙個時刻開始歇息,在這個時刻恰好歇息到0,這些時刻只能由f[i-k,k]轉移到,列舉乙個k,其中k<=i。

2和3情況轉移到的狀態是乙個,需要取乙個max。

即:f(i,j)=max

/*「一旦休息就必須等到疲勞為0」。

假設我們是用f[i][j]來表示i分鐘j疲勞時的最大值。

這時,我定義只要在f陣列裡i!=0的值必然不是休息中的。

即 先把問題看做:奶牛不能休息,每次只能向前跑。第i分鐘跑d[i]公尺。

那麼就會有: f[i][j]=f[i-1][j-1]+d[i];

然後 在每次處理的時候 加上一句判斷:

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

也就是 一旦休息就直接歸入f[?][0]的序列中 不帶入一般的考慮 從而減輕思考負擔

然後 到每分鐘的f[i][0]時 可以這樣去判斷:

f[i][0]=max(f[i][0],f[i-1][0]); // 這句是因為題目漏洞

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

上述題目漏洞為:奶牛在疲勞為0時,仍可休息,不降低疲勞。

*/

1 #include2 #include3 #include4 #include5

#define inf 1000000000

6using

namespace

std;

7int n,m,d[2005];8

int t=0;9

int f[2005][505

];10

11int

main()

1223

}24 cout<0

];25 puts(""

);26

return0;

27 }

view code

q:為什麼當前疲勞值小於當前時間就要休息

a:你從i-j分,疲勞度為j開始休息到i分,疲勞度才會變成0現在i-j好大於等於0

TYVJ P1023 奶牛的鍛鍊

奶牛的鍛鍊 背景 background usaco 描述 description 奶牛bessie有n分鐘時間跑步,每分鐘她可以跑步或者休息。若她在第i分鐘跑步,可以跑出d i公尺,同時疲倦程度增加1 初始為0 若她在第i分鐘休息,則疲倦程度減少1。無論何時,疲倦程度都不能超過m。另外,一旦她開始休...

Tyvj 題目1023 奶牛的鍛鍊(DP)

p1023奶牛的鍛鍊 usaco 奶牛bessie有n分鐘時間跑步,每分鐘她可以跑步或者休息。若她在第i分鐘跑步,可以跑出d i公尺,同時疲倦程度增加1 初始為0 若她在第i分鐘休息,則疲倦程度減少1。無論何時,疲倦程度都不能超過m。另外,一旦她開始休息,只有當疲憊程度減為0時才能重新開始跑步。在第...

P1023 稅收與補貼問題

p1023 稅收與補貼問題 正常的自由經濟下,商品銷量會隨著 的變動而變動,此時商家獲得利潤是和商品銷量和 有關的。利潤 成本 銷量 這個函式是有關 的復合函式。對於有些商品而言,不能放任市場隨意定價,需要國家對商品 進行控制。在這種情況下,國家會對這個商品規定乙個 題中稱為預期 商人在得到這個 後...