奶牛渡河 線性dp

2022-02-01 20:15:54 字數 1390 閱讀 3266

\(farmer john\) 以及他的 \(n (1\leq n\leq 2500)\) 頭奶牛打算過一條河,但他們所有的渡河工具,僅僅是乙個木筏。

由於奶牛不會划船,在整個渡河過程中,\(farmer john\) 必須始終在木筏上。在這個基礎上,木筏上的奶牛數目每增加 \(1\) ,\(farmer john\) 把木筏劃到對岸就得花更多的時間。

當\(farmer john\) 乙個人坐在木筏上,他把木筏劃到對岸需要\(m (1\leq m\leq 1000)\)分鐘。

當木筏搭載的奶牛數目從 \(i-1\) 增加到 \(i\) 時,\(farmer john\)得多花 \(m_i (1\leq m_i\leq 1000)\) 分鐘才能把木筏劃過河。

也就是說,船上有 \(1\) 頭奶牛時,\(farmer john\) 得花 \(m+m_1\) 分鐘渡河;船上有 \(2\) 頭奶牛時,時間就變成 \(m+m_1+m_2\) 分鐘。後面的依此類推。

那麼,\(farmer john\) 最少要花多少時間,才能把所有奶牛帶到對岸呢?當然,這個時間得包括 \(farmer john\) 乙個人把木筏從對岸劃回來接下一批的奶牛的時間。

第 \(1\) 行: \(2\) 個用空格隔開的整數:\(n\) 和 \(m\) ;

第 \(2...n+1\) 行: 第 \(i+1\) 為 \(1\) 個整數: \(m_i\) ;

第 \(1\) 行: 輸出 \(1\) 個整數,為\(farmer john\)把所有奶牛都載過河所需的最少時間;

5 1034

6100

1

50
載船運牛,每載一頭牛,運送時間越長,求最短的運送時間。

\(①\) 注意回來的時間。

\(②\)

\(m_i\) 指的是船上有 \(i\) 頭牛時,增加 \(m_i\) 的時間,而不是第 \(i\) 頭牛運的時候需要 \(m_i\) 的時間。

\(③\) 注意加上 \(m\) 本身。

求陣列的字首和,使 \(m_i\) 的值代表船上有 \(i\) 頭牛時,運送需要的時間。

決策:直接把這 \(i\) 頭牛運過去;

或者先把 \(j\) 頭牛運過去,回來在把剩下的 \(i-j\) 頭牛運過去。

動態方程:\(dp[i]=min(dp[i],dp[j]+cow[i-j]+m)\)

#include using namespace std;

const int maxn=5000+50;

int n,m;

int cow[maxn],dp[maxn];

int main()

for(int i=1;i<=n;i++)

}cout

}

奶牛渡河(dp)

時間限制 1 sec 記憶體限制 128 mb 提交 36 解決 27 提交 狀態 討論版 命題人 外部匯入 edit testdata 同步資料 farmer john以及他的n 1 n 2,500 頭奶牛打算過一條河,但他們所有的渡河工具,僅僅是乙個木筏。由於奶牛不會划船,在整個渡河過程中,fj...

奶牛渡河(dp)

時間限制 1 sec 記憶體限制 128 mb 提交 36 解決 27 提交 狀態 討論版 命題人 外部匯入 edit testdata 同步資料 farmer john以及他的n 1 n 2,500 頭奶牛打算過一條河,但他們所有的渡河工具,僅僅是乙個木筏。由於奶牛不會划船,在整個渡河過程中,fj...

奶牛的鍛鍊 線性dp

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