• 2010 华农 G 题,,组合,容斥原理 数据小的话可以DP 但是数据很大


    这是我们悲哀的一题,,没考虑数据量就用DP 开题了结果返回运行错误,,几番检查,,还是运行错误,到最后也没做出来

    这道题数据量大,,用简单的数组记录DP 会超时

    当时有想到要先忽略障碍求出总数再减去障碍物的路线

    可是如何求障碍物的路线,,。特别是多个障碍物之间可能存在相同的路线。。。鸭子问我的时候我回答不上来

    现在想想,,这个就是解题的突破点

    现在给出我的粗糙的想法

    题意,给出(n,m)的长方形。从(0,0)走到(N,M);

    1.求出忽略障你碍物的总数。用组合数就可以得 F(N,M)=(N     )

                              ( N+M)

    2求通过障碍物的路线

    假设只有一个障碍物 在(X,Y)

    则路线为 S=F(X,Y)*F(N-X,M-Y);(前后的路线相乘)

    对于多个障碍物。可以用容斥原理

    假设有三个障碍物(进行排序先)(X1,Y1,X2,Y2,X3,Y3)

    第一个障碍物A=F(X1,Y1)*F(N-X1,M-Y2);

    第二个障碍物B=F(X2,Y2)*F(N-X2,M-Y2);

    第三个障碍物C=F(X3,Y3)*F(N-X3,M-Y3);

    第一,二障碍物的共同路线AB=F(X1,Y1)*F(X2-X1,Y2-X1)*F(N-X2,M-Y2);

    第一,三障碍物的共同路线AC=F(X1,Y1)*F(X3-X1,Y3-X1)*F(N-X3,M-Y3);

    第二,三障碍物的共同路线BC=F(X2,Y2)*F(X3-X2,Y3-X2)*F(N-X3,M-Y3);

    第一。二。三障碍物的共同路线ABC=F(X2,Y2)*F(X2-X1,Y2-X1 )*F(X3-X2,Y3-X2)*F(N-X3,M-Y3);

    所以总的通过障碍物的路线为S=A+B+C-AB-BC-AC+ABC;

    由于最多只有10个障碍物 所以运算量为 2^10*F()=1024*F()、而F()可以在预处理先做出来的啦,,

    明显,看了july 大牛的做法后,,我感觉到自己太多太多的不足

    最后再给出JULY 大牛的精辟算法

    同样是用总数-障碍物
     算起点到每个障碍点的路径树first(i)(期间不会经过其它障碍点)
     总数-所有的first(i)*这点到终点的路径树
    first(i)= 起点到这点i的路径数-它前面每个first(j)*j到i全部路径数

    其实就是把问题转化为多个相同的子问题,都有相同的结构。消除了后效性

    给个实例哦

    第一个障碍物A=F(X1,Y1)

    第二个障碍物B=F(X2,Y2)-( A*F(X2-X1,Y2-X1) );

    第三个障碍物C=F(X3,Y3)-(A*F(X3-X1,X3-X1)+B*F(X3-X2,Y3-Y2));

    S=F(N,M)-A*F(N-X1,M-Y1)-B*F(N-X2,M-Y2)-C*F(N-X3,M-Y3)

    嘻嘻,,简单很多呢,,不愧是大牛啊。。

  • 相关阅读:
    KDrive 與 Embedded Linux
    windows内存管理初探
    开源方案
    boot time 优化
    psplash
    linux下操纵大于2G文件
    【技术贴】Windows图片和传真查看器打开图片慢,正在生成预览的解决办法!
    【转】c++.primer.plus.第五版.中文版[下载]
    【技术贴】魂斗罗坦克Normal Tanks第五关以及第5、6、7、关的LICENCE CODE的查
    【转】奇文共欣赏,疑义相与析:原文转载《电脑维护技巧》(N条举措N条理由)并请大家交流研讨
  • 原文地址:https://www.cnblogs.com/gdutbean/p/1706720.html
Copyright © 2020-2023  润新知