题目链接:
题目大意:
有N匹马,分为黑马和白马,要把他们安排到K个马槽中,最后所有马槽都不能是空的。我们将N匹马排成一列,要求按顺序安排马槽,比如前P1匹马安排在第一个槽,接下来的P2匹马安排在第二个槽。对于某一个马槽,设有i匹黑马和j匹白马,求使得所有马槽的i*j之和最小的方案,输出最小值。
思路:
前i个马槽放j匹马,可转移为:前i-1个马槽放m匹马(i-1 <= m < j),第j个槽放j-m匹马,遍历所有的m,取最优值。
设dp[i][j]表示前i个马槽放j匹马的最优值,black[k]、white[k]分别表示前k匹马中的黑马和白马数量。
则状态转移方程为:
for (int m = i-1; m < j; m++)
dp[i][j]=min(dp[i-1][m]+(