
高效算法设计
文章平均质量分 77
SimpleLifeT_T
github账号:lihongqiang
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LA3029 矩阵中求子矩阵最大问题
LA3029:题意给你一个矩阵,每个单元格要么为空,要么为满,求全是空的最大子矩阵的格子数*3. 最朴素的算法是枚举所有的子矩阵的左上角的点和右下角的点,这样就能确定一个矩形,然后再遍历这个矩阵,看矩阵是否全是空。复杂度大概是O(m^2*n^2) 通过扫描法,每次维护left[i][j],right[i][j],up[i][j],可以简化到O(mn) left[i][j]表示某个点的向左运动原创 2013-09-08 14:03:14 · 1059 阅读 · 0 评论 -
20130907北邮组队赛小结
A题:变形的扫描法的典型题。 比赛的时候我一看这题就想到了上次做的LA3029,不过那题做的太久了,没有什么印象了,最后悲剧的没有A出来。 先讲下LA3029:点击打开链接 那题是给你一个矩阵,每个格子满或者空,求最大的空的子矩阵。 这题是求满足每行和每列都是等差数列的最大子矩阵。其实做法都差不多,都是朴素的O(m^2*n^2),扫描法简化后O(m*n)的做法。 要注意的地方: 1.维原创 2013-09-08 15:30:02 · 603 阅读 · 0 评论 -
Uva11549 模拟判断有环的问题 Floyd判圈算法
这题题意是给你一个数n和一个数k,k每次平方后去前n位数,然后这n位数又平方,一直进行下去,求最大值。 可以模拟暴力再做: 注意一点就是,1s大约等于500,0000,估计下时间就行了。 这里介绍一下Floyd判圈算法,和找循环节不一样。 1.循环节的话是每次肯定会循环到最初始的位置,所以只要判断与最开始的前几个位置就行了。 2.而Floyd判圈法能解决不是初始位置循环的问题,也就是在某原创 2013-09-09 22:43:08 · 1077 阅读 · 0 评论 -
LA 3095 扫描法 线性
这题题意:给你一个矩形框,n个点的坐标和方向向量,问你最多可能在框中出现多少个点。 首先,把每个点在框中的起始时间和终止时间求出来,然后利用扫描法,离散出每个点的起始和终止时间,由于边界不算,所以注意下顺序问题。 这题有很多地方值得学习: 1.问题简化,每次直接求横坐标和纵坐标,分别取最大和最小值,这里计算的时候没有注意a的正负而错了一发。 代码: #include #include #原创 2013-09-10 22:46:56 · 829 阅读 · 0 评论 -
poj1328
题意:用最少的雷达覆盖全部的岛屿。 思路:先求出每个点的雷达在x轴上的范围,定义left和right,按left从小到大排序,然后以第一个点为标准,从第二个点开始,分三种情况讨论。建议用c++提交,用到了while(cin>>n>>d) 1.a[i].right 2.a[i].f 3.a[i].f>right 样例: 3 2 1 2 -3 1 2 1 1 2 0 2 0 0 #i原创 2012-12-13 20:16:47 · 337 阅读 · 0 评论 -
hdu4671 构造
#include #include #include #include #include #include #define maxn 2005 #define INF 0xfffffff using namespace std; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { if(n>m)原创 2013-08-13 22:28:53 · 655 阅读 · 0 评论 -
poj2287
题意:田忌赛马 思路:把田忌的马和国王的马分别按从大到小和从小到达的顺序排序。 1.田忌可能赢的局数1-n 2.田忌赢马的组合只能是田忌的前k匹马与国王的前k匹马,而且是田忌的第一匹马和国王的第k匹马比赛。 代码: #include #include #include #define maxn 1005 using namespace std; int t[maxn]; in原创 2012-12-14 00:12:13 · 643 阅读 · 0 评论