zoukankan      html  css  js  c++  java
  • 高神 SHU 3.12 DP2 总结

    /*******废话部分******

    发现自己做以前会的题都忘了,所以要好好总结一下,减少遗忘。

    */

    /*****搜索引擎优化部分*****

    高神 高神 高神 高神 高神 高神 高神 高神 高神

    */

    这个专题是高神开的DP2,都是高神精心挑选的题,要认真刷。

    高神开的DP2比赛链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=71636#overview

    密码:shuacm

    A – Barcode

    题意:给你一张n*m的图,让你把它变成一张类似条形码的图,其中白色和黑色部分都要在[x,y]之间。

    解法:两个状态,分别为当前列和当前颜色,保存所需的最小代价。这样就可以实现了。

    总结:尽量用少的状态来实现。

    B - Porcelain

    题意:给你n个架子,每个架子只能从左右拿出物品。问拿出k个物品,所能取得的最大值。

    解法:分步骤:第一步先求出只在一个架子取出k个的最大值。

                  第二步类似0-1背包,递推架子,求出最大值

    总结:碰到困难的问题,分布来实现。

    C – Camels

    题意:给你n个点,k个驼峰,求出可能的种数。(驼峰只能由1,2,3,4组成)

    解法:因为驼峰,驼谷由三个状态组成 ,至少需要保存前两个状态。

    四个状态:当前点序号  i-1  i  第几个驼峰

    总结: 充分利用题目信息来Dp,不要自己想乱七八糟状态。

    D - DZY Loves Sequences

    题意:给你一个长n的序列,求最长连续上升子序列。允许修改一个值。

    解法:第一步先求出不允许修改的递推。第二步再找出允许修改递推。

    总结:先实现简单,再实现复杂一些状态。

    E - Wall Bars

    题意:建造一个梯子,使得人能够爬到最上面h个中的任意一个。梯子长n,有四个方向,人一步最多h长。

    解法:任意选一个方向,旋转4次,从而DP。

                  四个状态记录的是同方向离它最近的距离。

                  其中一个为当前的方向,可以省略记为可达和不可达,也就是两个状态。

    总结:根据题目信息来分状态。这种方向不确定的,可以任意假定一个状态,再DP。不能单纯的乘以4,因为会有重复的状态出现,还需要去重。

    F - Positions in Permutations

    题意:求一个1-n的全排列中,友好度恰好为k的序列有多少个。友好的定义:|A[i]-i|=1;

    解法:要使一个位置友好,必须填的是i-1 或 i+1

             第一步:先求出正好满足k个位置为友好的方案数。不考虑剩余的n-k个位置。(假设在位置i的数 在不填充 i-1 或 i+1时存在可以填充其他值)

              状态为:   当前位置 ,k, i , i+1    然后进行DP

             第二步:第一步假设前提下,F[k]=D[n][k][][] *fac(n-k) 即为大于等于k个友好的方案数。

        而要求的是恰好为k个友好的方案数。最基本的想法是F[k]-F[k+1],但是这样是错的。因为这是在假定前提下实现的。假定不一定成立的。

        也就说F[k]的值是大于前面所说的“大于等于k个友好的方案数”,因为多包含了一些本来应该算作是F[k+1]的方案。

          如 n=2,k=1;

          全排列为:1 2

                      2 1

          F[1]=2;

          F[2]=1;

        但是事实F[1]=0,不满足假设的条件;

          既然会有不满足的,就反其道行之直接减去所有可能不满足的即可。

               设Ans[k]为恰好为k个友好的方案数,即题目所求。

               因为计算时假设在位置i的数 在不填充的i-1 或 i+1时存在可以填充的其他值,

          那么减去时也假设在位置i的数 在不填充的i-1 或 i+1时存在可以填充的其他值,

          这样就相互抵消了。

        然后继续递推就可以求解了。

    总结:神一样的思路。这个看智商的……以后继续跪。

    G - Sereja and Subsequences

    题意:给一个长度为n 的数组。可以求所有的不同的非递减子序列。

    对于每个非递减序列,求出和它长度相等,且字典序小于等于它的个数。问总共的个数。

    解法:其中有个关键点是不同的非递减序列。要实现不同的非递减序列,可以先根据他们的ID[ i ]排序,这样就可以避免重复的问题。

    接下来用树状数组来实现log(n)的递推。

    总结:神一样的思路。碰到“不同的”子序列,可以往树状数组方向考虑一下。

  • 相关阅读:
    【Uvalive4960】 Sensor network (苗条树,进化版)
    【UVA 1151】 Buy or Build (有某些特别的东东的最小生成树)
    【UVA 1395】 Slim Span (苗条树)
    【UVA 10600】 ACM Contest and Blackout(最小生成树和次小生成树)
    【UVA 10369】 Arctic Network (最小生成树)
    【UVA 10816】 Travel in Desert (最小瓶颈树+最短路)
    【UVA 11183】 Teen Girl Squad (定根MDST)
    【UVA 11865】 Stream My Contest (二分+MDST最小树形图)
    【UVA 11354】 Bond (最小瓶颈生成树、树上倍增)
    【LA 5713 】 Qin Shi Huang's National Road System (MST)
  • 原文地址:https://www.cnblogs.com/baobaopangzi88/p/4361413.html
Copyright © 2011-2022 走看看