动态规划03

今天主要讨论如何解决高维的动态规划问题,即很难直接想出来递推关系。

美妙的栅栏

Richard just finished building his new house. Now the only thing the house misses is a cute little wooden fence. He had no idea how to make a wooden fence, so he decided to order one. Somehow he got his hands on the ACME Fence Catalogue 2002, the ultimate resource on cute little wooden fences. After reading its preface he already knew, what makes a little wooden fence cute. A wooden fence consists of N wooden planks, placed vertically in a row next to each other. A fence looks cute if and only if the following conditions are met:

  • The planks have different lengths, namely 1, 2, . . . , N plank length units.

  • Each plank with two neighbors is either larger than each of its neighbors or smaller than each of them. (Note that this makes the top of the fence alternately rise and fall.)

    It follows, that we may uniquely describe each cute fence with N planks as a permutation a1, . . . , aN of the numbers 1, . . . ,N such that (any i; 1 < i < N) (ai − ai−1)*(ai − ai+1) > 0 and vice versa, each such permutation describes a cute fence. It is obvious, that there are many di�erent cute wooden fences made of N planks. To bring some order into their catalogue, the sales manager of ACME decided to order them in the following way: Fence A (represented by the permutation a1, . . . , aN) is in the catalogue before fence B (represented by b1, . . . , bN) if and only if there exists such i, that (any j < i) aj = bj and (ai < bi). (Also to decide, which of the two fences is earlier in the catalogue, take their corresponding permutations, find the first place on which they differ and compare the values on this place.) All the cute fences with N planks are numbered (starting from 1) in the order they appear in the catalogue. This number is called their catalogue number.

    After carefully examining all the cute little wooden fences, Richard decided to order some of them. For each of them he noted the number of its planks and its catalogue number. Later, as he met his friends, he wanted to show them the fences he ordered, but he lost the catalogue somewhere. The only thing he has got are his notes. Please help him find out, how will his fences look like.

      题目就很长,但大致意思很容易:我们要找一个满足以下性质的排列:

  • 排列里的数字满足波浪形;

  • 要求给出按字典序排列的第i个排列。
      我们设A[i]是用i个fences满足条件的组合数,显然我们无法找到合适的递归条件,于是我们把它分解:

     A[i]= sum(B[i, k]), k = 1,2,3...i #其中B[i, k]表示第k短打头的i个木棍的总的排列数。
    

此时,我们再尝试对B动规,找训B[i, k]和B[i - 1, j]之间的关系,但是第k短打头的时候,与i-1个木棍的所有排列可能又要分情况讨论,即:

     B[i, k] = sum(B[i - 1, j]) j = k, k + 1,..., i - 1 #后面的B都满足先降后升,即我们要把一个第k短的木板放到开头,使第二根比他高
     B[i, k] = sum(B[i - 1, j]) j = 1, 2, 3 ... , k - 1 #后面的B都满足先升后降,即我们要把一个第k短的木板放到开头,使第二根比他矮

于是,我们设C[i, k ,DOWN]表示第k短开头,并且满足先降后升的性质,C[i, k ,UP]表示第k短开头,并且满足先升后降的性质。这样,我们的递推关系就找到了:

 C[i, k, DOWN] = sum(C[i - 1, j, UP]) j = k, k + 1, ... , i-1
 C[i, k, UP]   = sum(C[i - 1, j, UP]) j = 1, 2, 3 ... , k-1
void solve(){
    int i,j,k;
    memset(dp, 0, sizeof(dp));
    dp[1][1][0] = dp[1][1][1] = 1;
    for(i = 2;i<=n;i++){
        for(j = 1;j<=i;j++){
            for(k = 1;k<=j-1;k++)
                dp[i][j][1] += dp[i-1][k][0];
            for(k = j;k<=i-1;k++)
                dp[i][j][0] += dp[i-1][k][1];
        }
    }
}

我们找到数目的递推关系之后,还要能找出任意某个排列的具体情况,即用到排序计数的思想:

举一个例子说明:假使我们有4根木棍,我们要求第三种排列
  * 1打头的总数B[4, 1] = 1,2打头的总数为B[4, 2] = 3,那我们就知道第二种排列就在2打头的里面,并且是第二个。第一个数字确定为2.
  * 2打头里面,先考虑DOWN的情况(因为DOWN的情况字典序一定小)C[4, 2, DOWN] = 1,C[4, 2, UP] = 2,于是总体的第三个就是C[4, 2, UP] 中第一个,即第二个数字确定为3.
  * 23打头里面DOWN的第一个为1,即第三个数字确定为1
  * 231打头里面第一个UP的数字为4,即第四个数字确定为4,所以结果就是2314。

代码很难写,还没写出来。。

作业题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 太行山下的淇河仍然不停地流淌着,岸边的垂柳显得格外的绿,绿的仿佛那是一块无暇的翡翠;绿得沉郁,如同一片浓浓的湖水;...
    Man丶Mood阅读 557评论 0 0
  • 小明私下不喜欢喊几位老总为某某总,觉得太正式。但是工作中对几位老总还是毕恭毕敬,敬而远之的。 上周末小明搬家,中午...
    小明和老陈阅读 166评论 0 0
  • 暑假好像到现在就算结束了。 昨天下定决心剪了短发。善善今天来要看我帅气的头发,感慨一句,下次长发飘飘估计也要两三年...
    金子dede阅读 234评论 8 5