題目描述 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個馬棚。他把他的馬排成一排然後跟隨它走向馬棚,因為他們非常疲勞,小明不想...