RQN 273 馬棚問題 dp

2022-02-19 17:03:11 字數 1306 閱讀 9604

pid273 / 馬棚問題

2016-07-29 18:21:55

執行耗時:1624 ms

執行記憶體:16248 kb

題目描述

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

輸入格式

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

輸出格式

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

樣例輸入

樣例輸出

思路:dp[i][t]=min(dp[i][t],dp[j][t-1]+(h[i]-h[j])*(b[i]-b[j]));

dp[i][t]表示第i匹馬放入第t個馬棚的最小答案;

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll __int64

#define esp 0.00000000001

const

int n=1e3+10,m=1e6+10,inf=1e9+10,mod=1000000007

;int

a[n];

inth[n];

intb[n];

intdp[n][n];

intmain()

for(t=1;t<=y;t++)

printf(

"%d\n

",dp[x][y]);

}return0;

}