p1023奶牛的鍛鍊
usaco
奶牛bessie有n分鐘時間跑步,每分鐘她可以跑步或者休息。若她在第i分鐘跑步,可以跑出d_i公尺,同時疲倦程度增加1(初始為0)。若她在第i分鐘休息,則疲倦程度減少1。無論何時,疲倦程度都不能超過m。另外,一旦她開始休息,只有當疲憊程度減為0時才能重新開始跑步。在第n分鐘後,她的疲倦程度必須為0。
第一行,兩個整數,代表n和m。
接下來n行,每行乙個整數,代表d_i。
bessie想知道,她最多能跑的距離。
5 25 3
4 2
10
9n <= 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 #include5view code#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 }
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 稅收與補貼問題 正常的自由經濟下,商品銷量會隨著 的變動而變動,此時商家獲得利潤是和商品銷量和 有關的。利潤 成本 銷量 這個函式是有關 的復合函式。對於有些商品而言,不能放任市場隨意定價,需要國家對商品 進行控制。在這種情況下,國家會對這個商品規定乙個 題中稱為預期 商人在得到這個 後...