• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
mengxm
博客园    首页    新随笔    联系   管理    订阅  订阅
上一页 1 2 3 4 5 6 7 8 下一页
2011年8月31日
poj2186
摘要: http://poj.org/problem?id=2186经典强连通分支,求解步骤是用tarjan算法求出强连通分支,然后缩点构成DAG,查看DAG中出度为0的点,若个数不等于1则不存在答案,输出0还可以使用tarjan算法的改进版gabow算法,后者在求解强连通分量的根时采用了更简单的方式tarjan代码View Code 1 #include <stdio.h> 2 #include <memory.h> 3 #define e 50001 4 #define v 10001 5 #define MIN(a,b) ((a)<(b)?(a):(b)) 6 st 阅读全文
posted @ 2011-08-31 00:58 mengxm 阅读(529) 评论(0) 推荐(0)
poj1236
摘要: http://poj.org/problem?id=1236问题A:在网络中需要多少电脑才能使所有学校都有软件,通过强连通算法缩点,构建DAG图,图中一定有入度为0的节点,由于这种节点无法通过别的节点传送软件,所以必须放一台电脑,求出入度为0的节点个数即可。问题B:在该网络中最少添加多少线路,使在任意节点放置电脑所有学校都可以有软件,答案是求入度为0的节点个数和入度为0的节点个数的最大值。证明B:1.以下所有点都是孤立的,连接两个点时,出发的边连接的是起始点中出度为0的点,终点中入度为0的点。(1).定义当点数n=1时,如果是缩点构成的一个点必须添加一条反身边,否则不用添加边。(2).当点数n 阅读全文
posted @ 2011-08-31 00:48 mengxm 阅读(323) 评论(0) 推荐(0)
2011年7月24日
poj1141
摘要: http://poj.org/problem?id=1141黑书动态规划第一道题目,书中只给了求最小添括号数的方法,输出形式有自己想,有两种解决方法,一个是记忆化搜索,一个是递推,我采用的是前者,不过大多数代码采用的是后者,输出形式就我所见也有两种,我的是每一个节点都记录自己的括号字符串,另一种是用数字代表某种意义,然后递归输出,先给我的代码,如果你有错误不知道在哪里,是一下这组数据【】【】 1 #include <stdio.h> 2 #include <string.h> 3 #include <iostream> 4 #include <stdl 阅读全文
posted @ 2011-07-24 11:46 mengxm 阅读(1843) 评论(0) 推荐(0)
2011年7月20日
ECUST Sleeping at Work
摘要: http://202.120.106.94/onlinejudge/problemshow.php?pro_id=406此题纠结我一天时间,仍然只是理解了大牛的代码,自己却实现的各种错误,现针对大牛代码给出详细解释,若以后有幸作出此题,必给详细解题过程 1 #include <stdio.h> 2 #include <memory.h> 3 int n,m,r; 4 int dp[501][51][51]; 5 int a[501]; 6 int i,j,k; 7 int main() 8 { 9 int cas;10 scanf("%d",& 阅读全文
posted @ 2011-07-20 17:26 mengxm 阅读(155) 评论(0) 推荐(0)
2011年7月19日
hdu 3306
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3306矩阵连乘求解。首先我们列一个式子 A(n)=x*A(n-1)+b*A(n-2);则A(n)^2=x^2*A(n-1)^2+y^2*A(n-2)^2+2*x*y*A(n-1)*A(n-2);也就是说S(n)=S(n-1)+A(n)^2=S(n-1)+x^2*A(n-1)^2+y^2*A(n-2)^2+2*x*y*A(n-1)*A(n-2);我们从中取出不能直接求解的部分构成一个矩阵M={S(n-1),A(n-1)^2,A(n-2)^2,A(n-1)*A(n-2)}然后由此可以看出有一个辅助矩阵D={1 0 阅读全文
posted @ 2011-07-19 08:41 mengxm 阅读(399) 评论(0) 推荐(0)
2011年7月12日
最长上升子序列nlogn算法
摘要: 在川大oj上遇到一道题无法用n^2过于是,各种纠结,最后习得nlogn的算法最长递增子序列,Longest Increasing Subsequence 下面我们简记为 LIS。排序+LCS算法 以及 DP算法就忽略了,这两个太容易理解了。假设存在一个序列d[1..9] = 2 1 5 3 6 4 8 9 7,可以看出来它的LIS长度为5。n下面一步一步试着找出它。我们定义一个序列B,然后令 i = 1 to 9 逐个考察这个序列。此外,我们用一个变量Len来记录现在最长算到多少了首先,把d[1]有序地放到B里,令B[1] = 2,就是说当只有1一个数字2的时候,长度为1的LIS的最小末尾是2 阅读全文
posted @ 2011-07-12 22:38 mengxm 阅读(6293) 评论(1) 推荐(7)
2011年6月26日
uva537
摘要: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=7&problem=478&mosmsg=Submission+received+with+ID+8990394前一个代码本人觉得很漂亮,但是却过不了,希望有人能给以解释,后面的代码是ac的字符模拟 1 #include <stdio.h> 2 int main() 3 { 4 int sum; 5 char key,last,unit; 6 scanf 阅读全文
posted @ 2011-06-26 21:42 mengxm 阅读(216) 评论(0) 推荐(0)
uva458
摘要: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=6&problem=399&mosmsg=Submission+received+with+ID+8989621第一次做uva上的题,看了很久没有看懂题目,最后看了人家的结题报告,才明白此题的字母替换规则要自己从实例中总结出来,asingle arithmetic manipulation这句话是一个提示,表明字符替换操作只有一个操作,也就是只有+,-,× 阅读全文
posted @ 2011-06-26 16:22 mengxm 阅读(201) 评论(0) 推荐(0)
hdu1222
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1222此题如何思考?需要判断狼是否可以到达每一个洞,由此可以得出这样的式子设洞的位置为n,总的洞数量为m,狼查找的间隔为k;a,b为任意正整数(n+a*m)=b*kn=b*k-a*m这样问题就转化为用欧几里德扩展定理可以求解的问题了,即求解是否存在这样的a,b是上式成立,具体过程请看欧几里德扩展定理那篇日志但是这样就需要求许多次,遍历m次,由欧几里德扩展定理可知等号前的数一定要符合是k,m的最大公约数的倍数,也就是说如果求出k,m的最大公约数不是1,那么在1到n之间总会存在至少一个数不能整除该最大公约数,于是 阅读全文
posted @ 2011-06-26 09:20 mengxm 阅读(426) 评论(0) 推荐(0)
2011年6月16日
欧几里得扩展算法
摘要: 首先证明欧几里德算法(即最大公约数算法)设有a,b两个数;a=k*b+r,r=a%b;假设d是a,b的一个公约数,a%d=0,b%d=0;r=a-k*b,因此r%d=0;即所有a,b的公约数都是b,a%b的公约数,那么gcd(a,b)=gcd(b,a%b);所以当a%b=0时,即a和b的最大公约数就是他们本身;算法代码int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}gcd(a,b)=gcd(b,r0)=gcd(r0,r1)=...=gcd(rn-1,rn)=gcd(rn-1,0)=rn-1. 接下来讲解欧几里得扩展算法(即求n*a+m*b=gcd 阅读全文
posted @ 2011-06-16 21:32 mengxm 阅读(215) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 下一页
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3