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