zoukankan      html  css  js  c++  java
  • 煎饼堆问题(转载)

    Stacks of Flapjacks

    原文链接    http://blog.csdn.net/yzfuture2010/article/details/8091337

     有一堆煎饼,直径各异,摞成一堆。可用一把铲子插入任意两张饼之间,完成一次对铲子之上所有饼的翻转操作。假设最底部的饼的位置为1,最顶层的饼的位置为n。对第i (1≤i≤n) 张饼及其上的所有饼的一次翻转操作可以记为flip(i)。

    最左边一列经过flip(3)变为中间一列,而中间一列经过flip(1)变为最右边一列。

     求算法,使得能对任意给出的一堆饼经过如上操作变为有序堆。堆中最小直径的饼在最顶层,最大直径的饼在最底层。

    算法很简单,在n个饼组成的堆中找到直径最大的饼,假设其位置为m,作一次flip(m)操作。操作后,最大的饼就位于堆顶,然后再作一次flip(1),使最大的饼处于最底层。由于底层的饼为最大,它肯定不会再参与后面的flip操作。接下来只需对剩余的n-1张饼作同样的操作即可,找到递归结构。

    其中A为一个数组用以保存饼堆,n表当前饼堆的大小。

  • 相关阅读:
    JQuery_1
    CSS_1
    CSS_3
    CSS_4
    2020.10.19小记
    CSS_2
    IT茧
    亲爱的小C
    四五点钟的太阳
    有聊
  • 原文地址:https://www.cnblogs.com/apprentice89/p/2829812.html
Copyright © 2011-2022 走看看