使用动态编程使数组不减少

时间:2014-03-26 06:07:21

标签: c++ sorting dynamic-programming lcs

我在编程竞赛中遇到了这个问题,我认为它可以通过DP解决但却无法想到,所以请帮助。这是任务:

有n堆硬币线性放置,每个硬币标记为1到n。你还有一袋装有无限硬币的硬币。堆栈和麻袋中的所有硬币都是相同的。你所要做的就是让硬币的高度不降低。

您选择两个堆栈i和j,并在堆栈'i'到堆栈'j'(包括)的每一堆硬币上放置一个硬币。这一完整的操作被视为一举一动。您必须尽量减少移动次数,使高度不降低。

No. of Test Cases < 50  
1 <= n <= 10^5  
0 <= hi <= 10^9 

输入规范: 会有一些测试用例。读到EOF。每个测试用例的第一行将包含单个整数n,第二行包含n个高度(h [i])的堆栈。

输出规格: 输出单个整数,表示每个测试用例的移动次数。

for eg: H={3,2,1}
     answer is 2
     step1: i=2, j=3, H = {3,3,2}   
     step2: i=3, j=3, H = {3,3,3} 

0 个答案:

没有答案