Landscaping S
其实是一道 USACO2012年3月月赛银组的
大水题·
题目描述
有 n n n个花坛,编号为 1 , 2 , . . . . . , n 1,2,.....,n 1,2,.....,n。现在每个花坛有 A i A_i Ai个泥土,要通过以下操作,将它们变为 B i B_i Bi个>泥土:
- 在某个花坛增加一个泥土 ,要花费 X X X。
- 在某个花坛减少一个泥土,要花费 Y Y Y.。
- 把某个花坛的泥土搬到另一个花坛里,要花费 Z ∣ i − j ∣ Z|i-j| Z∣i−j∣。
求花费最小值?
分析
我觉得这题的 d p dp dp的方法很妙
存储
乍一看,我们会直接把 a a a数组和 b b b数组的值直接存起来,像这样:
数组 | 值 | |||
---|---|---|---|---|
a | 1 | 2 | 3 | 4 |
b | 4 | 3 | 2 | 0 |
但发现这样做不出来
观察题目,每次操作的是泥土不是花坛,所以我们可以把每个泥土在哪个花坛存起来,像这样:
数组 | 值 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
a | 1 | 2 | 2 | 2 | 2 | 3 | 3 | 4 | 4 | 4 | 4 | 4 |
b | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 3 | 3 |
这好像是某一道题
具体代码
for(int