xIao_wU 思维磁场 - Just Run And Never Forget I Have A Dream

TOJ -- 1788. Raising Modulo Numbers

阅读全文

PKU 1742 -- Coins

    楼教主的题,没想到,然后扒了一大堆资料,感觉都不是啥好东西,关于剩余类到是没细看 - -~ 没耐心,然后发现与其说这题是01背包或者多重背包,不如说是完全背包的活用,其实给完全背包加一个限制条件,就可以了,好题啊好题。

继续阅读

HDU -- 3287 Theta Puzzle

    有7个点 , 可以给每个点编号 , 分别为0~6 , 故这个图共有 7! = 5040 种状态量,这个状态量可以很灵活的实现 , 而且要超时基本是不可能的 , 判重方面可以适用全排列的hash , 故内存也占极少 , 所以适用任何一种算法。
   状态转移则可以适用
   int move[7][3] = { {1 , 5} , {0 , 2 , 6} , {1 , 3} , {2 , 4} , {3 , 5 , 6} , {0 , 4} , {1 , 4} };
   若move[j] 则表示 i点和j点可互换 , i 点为这个游戏的空点。
   开多一个数组来存可以移动个数
   int dir[7] = {2 , 3 , 2 , 2 , 3 , 2 , 2};

继续阅读

PKU 3009 -- Curling 2.0

    刚开始毋庸置疑的敲了个BFS,想到可以轻轻松松过掉,发现样例过不了,怪怪的。细想一下,发现BFS中保存的vis数组中,若之前给碰掉的墙块就成为空的,将导致其他状态中也无视了这个块,若每个状态都要保存一个20 * 20的矩阵的话,空间消耗是可想而知的。故可以利用dfs的回溯,由于不用考虑最优值,只要找出步数小于10的即可,DFS恰好可以解决此题的空间问题。

    觉得这题挺不错的,之前做的,一直没有写出解题报告,前段日子太忙了 - -#

继续阅读

无向图割点

     建议阅读:黄劲松 《无向图的块与圈》

    求割点主要理解三个定理:

  w定理1DFS中,e=uv是返祖边,那么要么uv的祖先,要么uv的后代子孙。
  w定理2DFS中,e=uv是父子边,且dfn[u] > 1low[v] ≥ dfn[u],则u是割点。
  w定理3DFS的根r是割点的充要条件是:至少有2条以r为尾(r出发)的父子边。
         定理1是毋庸置疑的,定理2则是运用定理1来确定u是割点,通俗的表述则为如果 v 是 u 的儿子,而 v 的老祖先也是 u 的后代,则 u 为割点,可以想象,若 u 被去掉,v 的祖先则无法和u的祖先相连接,故u则为割点。定理2有个dfn[u] > 1,则是因为定理三,当dfn[u] == 1时,u为根节点,故需要定理三来补充说明。具体证明过程可以阅读上面的ppt。

继续阅读

PKU 1990 -- MooFest 树状数组

    题目要求在一个横轴上,求出每个点和相对距离 * max( 声音1 , 声音2) ,直接模拟着做的话,复杂度为O(n ^ 2) ,必定超时。

    二元集的题目可使用排序来进行有序化操作,由于两个集合的操作是取最大的声音,故可以对v进行升序操作。for(int i=0; i < n;  i++)的时候,去声音值为v[i]即可。

    而现在主要解决在轴的位置上。对一个点进行操作的时候,可分为坐标前的点和坐标后的点,若坐标前点的个数为 n1 , 总和为 sum1 , 坐标后的点的个数为 n2 , 总和为 sum2 ,则 相对距离和 = (该点的坐标值 *  n1) - sum1 + sum2 - (该点坐标值 * n2)。 对坐标总和和位置前后的坐标总数,都可以适用树状数组在O(lgn)的时间来进行动态统计。每次加入点,更新树状数组即可。

继续阅读




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee