151105的测试总结
2015-11-05 15:53
281 查看
第一题
【题目及题号】path superoj1005【题解】
题意就是给出中序遍历和先序遍历求二叉树。
中序遍历为123456……
那么对于先序遍历的第一个是整棵树的根,然后编号比他小的都在左边,大的都在右边。
然后递归下去做它的左子树即可。
【注意事项】
传参数的时候一定要想清楚,调了快半个小时Orz。
第二题
【题目及题号】wolf superoj1006【题解】
40%
暴力搜索(状压)枚举先杀掉哪一个即可。
100%
区间Dp,f[i][j]表示消灭i~j的狼最少需要花费的代价。
那么f[i][j] = f[i][k-1]+f[k+1][j]+a[k]+b[k-1]+b[k+1];取min即可;
第一维枚举长度,第二维枚举左界,第三维枚举k即可。
可以递归实现,递推也很好写。
【注意事项】
区间DP Orz。感谢大神让我发现了这个洞。
第三题
【题目及题号】seq superoj1007【题解】
30%
O(n3)O(n^3)
枚举删除l的左界,然后重新求最长上升序列。
60~70%
方法一
O(n2log2n)O(n^2log_2n)
枚举删除l的左界,然后用nlog2nnlog_2n的方法求最长上升序列(把数列每项依次-i(待验证))。
方法二
O(n2)O(n^2)
f[i][0]表示到第i个数,前面没有出现过l段删除的数;
f[i][1]表示到第i个数,前面出现过l段删除的数。
f[i][0] = max f[j][0] (a[i]>a[j])
f[i][1] = max f[j][1] (a[i]>a[j]) f[j][0] (a[i]>a[j] && j < i-l)
100%
O(nlog2n)O(nlog_2n)
类似70%的方法二,只是用数据结构维护。
把f[i][0]的值根据a[i]丢到线段树A(a[i]+1,cnt)里维护max;
把f[i][1]的值根据a[i]丢到线段树B(a[i]+1,cnt)里维护max;
到i的时候还要把f[i-l-1][0]丢到线段树B中;
然后A中询问a[i]即可更新f[i][0];
同理维护f[i][1];
【注意事项】
因为我取l的时候是对i取开,所以最后要记录到n+1。
相关文章推荐
- [erlang] mnesia
- 将node作为服务器的几种方式
- js replace 替换
- Load和CPU利用率是如何算出来的 (转发)
- GCCXML 安装
- JavaScript高级程序设计之DOM 扩展之专有扩展之children属性第11.4.2讲
- 一看就明白的爬虫入门讲解-基础理论篇(上篇)
- 活在自己的世界,难以沟通的“码农”
- 用xfire实现基于java的webservice接口调用
- ios 通知NSNotificationCenter 的名字可否同名
- IO流的操作规律
- 统计各推荐组合中的某个商品与预测商品的相似度(最高相似度)
- Linux驱动开发必看
- MTD flash 驱动
- MySQL 5.6 Threadpool(优先队列)介绍及性能测试【转】
- 自定义控件其实很简单 九
- 2.[Linux系统]Linux系统介绍
- MFC的字符串分解函数AfxExtractSubString
- RxJava学习资源
- JDBC之数据类型和事务