面向对象是个好东西,他可以使责任分立,于是我尝试着在ural1022里面使用了这个思想来实现拓扑排序,很幸运的一次AC。

以节点为对象,他的责任有:
1 操作自身划入另一个集合
2 操作子节点入度减一
3 通知入度为0的子节点执行上述两个操作
面向对象的好处除了责任分立之外,还有数据的独立。节点对象存储了自身入度,出度,孩子节点等信息。不得不说在思路上比面向过程的要清晰,易书写也易维护。
ural1017好多人说是DP,我却用递推把他解了出来。。说实话,DP和递推的界限不是很明显,我甚至觉得DP是用递推实现的记忆化搜索。网上的DP是O(n^2)的时间复杂度。递推是O(n^3)。
递推式为:f[i,j] = sum{f[i-j,k]}(k = 0..min(i-j,j-1))
自底向上的递推。
其实这个式子还是有优化的余地的,比如k的下界,可用(l(l+1)/2 = i-j)计算出l,l便是下界。
l约等于sqrt(2*(i-j)),取l为sqrt(i-j),这样一来又可以提升一些效率,只不过这个朴素的算法没有超时,也便不再添加不必要的优化。
这个题有个悲剧的地方就是有两次WA test6和一次stack crash。
wa test6是因为接收答案的变量范围定义的太小了
stack crash是由于改大变量后堆栈溢出。数组放到main里面会出现这个状况,但是写到main外面就不会。
原因是函数内分配的变量会放到栈区(main也不能免俗),栈区大小一般是2M。而全局区却很大(有人说是4G)

转载于:https://www.cnblogs.com/dk647/archive/2011/05/28/2060898.html

面相对象的topSort和递推【ural1022/ural1017】相关推荐

  1. 基础算法整理(1)——递归与递推

    程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一 ...

  2. 4.04Day14递推、三元表达式、列表/字典推导式、匿名函数

    复习:1.迭代器:不需要索引的取值方式2.生成器:通过特殊的语法自定义的迭代器3.枚举对象:为可迭代对象创建索引(按照迭代的顺序创建索引) 迭代器对象:装有多个值的容器 1. 可用通过.__next_ ...

  3. 蓝桥杯 算法提高 递推求值(矩阵快速幂)详解

    传送门 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n-3, 1) + 2F(n-3, 2) + 3 ...

  4. 函数的递推matlab,关于递推最小二乘法辨识参数的matlab编程(含注释)

    最近在做关于过热气温的动态建模问题.有现场运行的历史数据,要找出导前区和惰性区的传递函数. 对这类算法了解不多,程序读起来比较吃力,所以就转来一篇完整的辨识程序,在原有基础上进行了简化,并稍加注解一下 ...

  5. HDU2049 不容易系列之(4)——考新郎【递推】

    不容易系列之(4)--考新郎 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  6. CC00034.bigdatajava——|Java方法封装.V16|——|Java.v16|费氏数列.v02|递推实现|

    一.费氏数列的递推实现 ### --- 案例题目~~~ --> 编程实现费式数列中第n项的数值并返回. ~~~ --> 费式数列:1 1 2 3 5 8 13 21 -- 二.递推实现原理 ...

  7. VINS-Mono之后端非线性优化 (目标函数中视觉残差和IMU残差,及其对状态量的雅克比矩阵、协方差递推方程的推导)

    文章目录 1. 前言 2. 非线性最小二乘 2.1 Guass-Newton 和 Levenberg-Marquardt 2.2 鲁棒核函数下状态量增量方程的构建 3. 局部Bundle Adjust ...

  8. 常见算法思想2:递推法

    递推法 递推算法犹如稳重的有经验的老将,使用"稳扎稳打"的策略,不断利用已有的信息推导出新的东西. 在日常应用中有如下两种递推算法: (1)顺推法:从已知条件出发,逐步推算出要解决 ...

  9. 递 归 ,递 推 ,贪 心,学 习 总 结

    目                       录 壹 :递 归 一 . 递 归 初 步( 理 论 ) 二 . 递 归 深 入( 习 题 ) 贰 :递 推 一  .  递  推  初  步 ( 理 论 ...

最新文章

  1. 根据进程名杀死进程 -kill进程名
  2. python实现直播服务非rtmp版本(非常简单)
  3. QT 调用QWebEngineView显示网页
  4. Struts流程分析+源码分析
  5. 史上最怂黑客?新病毒从上线到“自首”只勒索到五块钱,最后主动提交了密钥...
  6. 【iCore1S 双核心板_ARM】例程十二:DMA实验——存储器到存储器的传输
  7. Windows更新右下角出现 天气温度等提示,如何取消
  8. Android 四大组件系列篇
  9. 层次聚类 簇数_聚类(一):K-means、层次、DBSCAN、均值漂移、K-Means 与 KNN
  10. magento 自动发送跟踪号_光伏电站自动跟踪集散控制系统的研究
  11. C#中用WinAPI调用外部程序
  12. MySQL数据库主键与外键
  13. 金士顿u盘数据恢复软件推荐
  14. 同学聚会幽默 , 小学生搞笑图片
  15. 三国志战略版:四大阵营武将总结——魏国篇
  16. 这些跳槽理由千万不能说!
  17. [HTML5游戏开发]挑战横版ACT(三):遇红颜英雄亦多情
  18. 千里马android framework开发解决Accessing hidden method限制,让应用访问隐藏方法(需要可以修改系统源码方案)
  19. 解决python3+selenium+chromedriver运行时chrome浏览器闪退问题
  20. Linux性能优化实战:如何“快准狠”找到系统内存的问题?(21)

热门文章

  1. [HEOI2017] 相逢是问候
  2. 关于数据库的增删改查
  3. PyQt+Html+Js
  4. golang 基础知识4
  5. Oracle Schema Objects(Schema Object Storage And Type)
  6. 保存mysql用户的登录信息到~.my.cnf文件;用于方便登录操作。
  7. ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总
  8. 算法------二叉树的层序遍历
  9. android studio 编译报错:download fastutil-7.2.0.jar
  10. Ubuntu磁盘分区以及双系统启动顺序修改