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;
}