區間DP 軍訓值日生

2021-10-05 11:21:01 字數 1457 閱讀 4838

問題描述:

每次軍訓課一結束,同學們都顧不得整理自己的小板凳等訓練所需物品,以最快的速度衝向食堂,軍訓時體能消耗太大了,他們必須輕裝前進,搶到自己喜歡的食物。作為軍訓值日生,小明的工作量非常大,他們要將自己班級中每個同學的小板凳整理好放在一起。

假設在整理前,班級中某些同學的小板凳是放在一起的,我們稱放在一起的小板凳為一組小板凳,並且班級中所有小板凳是排成一排的。小明在整理自己班級小板凳的時候,會將相鄰的兩組小板凳整理到一起,組成一組新的板凳,所消耗的能量是兩組板凳數量的乘積。

根據所給出的板凳數量及分組情況,請你幫組小明計算出整理完全班所有小板凳所消耗的最少能量。

輸入要求

有多組資料(不超過5組)。

每組資料報含2行。

第一行包含乙個整數n(0輸出要求

每組資料輸出小明整理完全班所有小板凳所消耗的最少能量。

輸入輸出

2

1 23

5 1 2217

解題思路:區間dp的一般解法,把整個區間分隔開,找尋左區間的最優解和右區間的最優解,然後再將左右區間和並得到的就是整個區間的最優解,意思就是先將整體劃分為小部分,最後再將小部分合併成乙個整體;

上**:

#include

using

namespace std;

const

int inf=

1e9;

int s[

110]

,f[110][

110]

;int

main()

}}cout<[n]<}return0;

}

下邊再來一道,嘿嘿

問題傳送門

不過多解釋了,感覺就是模板

上**:

#include

using

namespace std;

const

int maxn =

310;

int dp[maxn]

[maxn]

;int n;

int s[maxn]

;int

main()

}}cout << dp[1]

[n];

return0;

}

其實把這兩個放一起來看,完全一樣似的,就有一點不同就是,那個二維陣列維護的價值不同,乙個是兩區間數量的積,乙個是兩區間數量的和,其實都一樣,不是很難解決,不過都需要來個字首和,這樣真是方便的太多了

線性dp 區間dp

1 尼克的任務 額一道挺水的題,愣是做了幾個小時 動態規劃大致的思路還是找乙個轉移 換個詞就是影響 我們可以明顯看出本題的規則 空暇時,一遇到任務必須挑乙個接 求1 n時間內最大空暇時間 所以將任務排序是必要的,兩個關鍵字 再來想象一下當我做到第i 個任務時,我在 st i st i t i 1 時...

DP 二分 JZOJ 3463 軍訓

description hysbz 開學了!今年hysbz 有n 個男生來上學,學號為1 n,每個學生都必須參加軍訓。在這種比較墮落的學校裡,每個男生都會有gi 個女朋友,而且每個人都會有乙個欠扁值hi。學校為了保證軍訓時教官不會因為學生們都是人生贏家或者是太欠扁而發生打架事故,所以要把學生們分班,...

線狀DP及區間DP

這裡我們都用到動態規劃的思想 dynamic programming,簡稱dp。本質就是組合子問題來求解原問題,且對每個子問題只求解一次。一般來說四個步驟 1.刻畫乙個最優結構特徵 2.遞迴的定義最優解值 3.計算最優解的值 4.利用計算出的資訊構造乙個最優解 這邊直接給出 include incl...