codevs1962 馬棚問題

2021-07-09 18:08:32 字數 963 閱讀 4194

題目描述 description

每天,小明和他的馬外出,然後他們一邊跑一邊玩耍。當他們結束的時候,必須帶所有的馬返回馬棚,小明有k個馬棚。他把他的馬排成一排然後跟隨它走向馬棚,因為他們非常疲勞,小明不想讓他的馬做過多的移動。因此他想了乙個辦法:將馬按照順序放在馬棚中,後面的馬放的馬棚的序號不會大於前面的馬放的馬棚的序號。而且,他不想他的k個馬棚中任何乙個空置,也不想任何一匹馬在外面。已知共有黑、白兩種馬,而且它們相處得並不十分融洽。如果有i個白馬和j個黑馬在乙個馬棚中,那麼這個馬棚的不愉快係數將是i*j。所有k個馬棚不愉快係數的和就是係數總和。確定一種方法把n匹馬放入k個馬棚,使得係數總和最小

輸入描述 input description

輸入:在第一行有兩個數字:n(1≤n≤500)和k(1≤k≤n)。在接下來的n行是n個數。在這些行中的第i行代表佇列中的第i匹馬的顏色:1意味著馬是黑色的,0意味著馬是白色的。 

輸出描述 output description

輸出:只輸出乙個單一的數字,代表係數總和可能達到的最小值

樣例輸入 sample input

6 311

010

樣例輸出 sample output 2

【題解】

和乘積最大有點像,也是乙個區間dp,狀態可以表示為把前i個數分成j個部分。

然後可以把問題轉化為求前面幾個數分成j-1個部分,然後再加上最後一部分(其實不就是j部分麼)

即f[i][k]=min(f[i][k],f[j][k-1]+anger[j+1][i]);

預先處理出來怒氣值。

【**】

#include#include#includeusing namespace std;

int n,k1;

struct hps[505];

int f[505][505],anger[505][505],a[505];

int main()

for (int i=1;i

動態規劃 RQNOJ 馬棚問題

每天,小明和他的馬外出,然後他們一邊跑一邊玩耍。當他們結束的時候,必須帶所有的馬返回馬棚,小明有k個馬棚。他把他的馬排成一排然後跟隨它走向馬棚,因為他們非常疲勞,小明不想讓他的馬做過多的移動。因此他想了乙個辦法 將馬按照順序放在馬棚中,後面的馬放的馬棚的序號不會大於前面的馬放的馬棚的序號。而且,他不...

RQNOJ273 馬棚問題(DP)

dp i j d p i j 表示對於前i個馬棚,裝前j匹馬的不愉快係數的最小值。dp i j m in d p i j dp i 1 k c ost k 1 j d p i j mi n dp i j d p i 1 k co st k 1 j 對於前i個馬棚,裝前j匹馬的不愉快敘述,可以考慮對於...

RQN 273 馬棚問題 dp

pid273 馬棚問題 2016 07 29 18 21 55 執行耗時 1624 ms 執行記憶體 16248 kb 題目描述 每天,小明和他的馬外出,然後他們一邊跑一邊玩耍。當他們結束的時候,必須帶所有的馬返回馬棚,小明有k個馬棚。他把他的馬排成一排然後跟隨它走向馬棚,因為他們非常疲勞,小明不想...