HUT 1685 奶牛的鍛鍊 DP

2022-05-28 16:45:09 字數 932 閱讀 6690

解決該題的思路就是如何建立狀態就保留所有的解(包括臨時解)這很簡單,該題只是對於某一分鐘走或者是休息,而這也只改變其疲勞值,因此開乙個二維陣列第一維表示該走到了第幾分鐘,第二維表示疲勞值,保留的值為能夠走得最遠距離。該題還有乙個地方要注意就是疲勞值為零的狀態的**有多個,可以是原來疲勞值為0,1以及能夠休息到該分鐘為零的任意前面一分鐘。

f[i][j] 表示第i分鐘疲勞值為j能夠走得最遠距離。

f[i][0] = max(f[i-1][0], f[i-k][k]) 其中 1 <= k <= i /2, 因為i-k >= k;

f[i][j]  (j != 0) = f[i-1][j-1]+seq[i];  

**如下:

#include #include 

#include

#include

#include

#define maxn 20005

using

namespace

std;

/*定義如何的狀態,才能夠使得問題得到解決 ? ? ?

決定該題的解的影響因素是在第i分針是選擇休息還是跑步

那麼第i分鐘的決定於前面的最優狀態的有什麼關係

確定乙個二維陣列,用來保留第i分鐘疲勞值為任意值所能夠

前進的最遠距離.

5 2534

210

// 要是休息的話,那麼就一直休息,直到疲勞值為零

*/int

n, m, seq[maxn];

int dp[maxn][505

];void

dp()

}else}}

printf(

"%d\n

", dp[n][0

]);}

intmain()

dp();

}return0;

}

DP練習 奶牛的鍛鍊

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

奶牛的鍛鍊 線性dp

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

奶牛的鍛鍊

這題有一點比較猥瑣,就是一休息就要休息到疲勞值為0 奶牛果然沒有人類勤奮啊 辣麼如果不讓奶牛休息,這題是不是好解的多呢?任何乙個蒟蒻都可以看出,f i j f i 1 j 1 d i 現在加入了休息也很好辦,一休息就去替換f 0 而不參加迴圈部分的運算,這樣可以減去一些負擔。於是我們可以寫出偽 f ...