![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法专区
bmexue
这个作者很懒,什么都没留下…
展开
-
八皇后问题之C++解决
题目说明:皇后可以横竖45度斜着吃子,现在在8*8的棋盘上放置8个皇后。问如何放置才能使她们平安相处? 我用树结构解决的:对前7行的节点来说,下面有8中选择,如果下一行的某一个节点n可以放置,则改链增加,直到8个子都能放,否则链寻访下一个节点n+1,还不行就返回(节点数变小)。直到遍历了所有可能: 太可惜了,买了新电脑,把这个源代码没有拷贝(原创 2006-04-16 00:03:00 · 1529 阅读 · 0 评论 -
计算剩余时间的方法
近日做一个软件,需要计算剩余时间。 算法原理就是: 已经耗时*剩余大小/已经处理的大小。 但发现了计算的速度一直抖动, 发现是因为UI在没有进度回调时,也在刷新剩余时间,这样导致了误差。 比如处理1G大小的数据 已经处理了100M 耗时100S,原创 2011-08-18 17:04:31 · 5438 阅读 · 0 评论 -
路径搜索学习
<br />路径搜索算法比较多。 主要算法都有:<br /> <br />广度优先算法:<br /> <br />深度优先搜索:Dijkstra算法:<br />A*(启发式搜索): <br /> <br /> 广度优先和 Dij本质上都是贪心算法,但是对各个节点一视同仁,理论上的图可以认为所有的节点没有区别,但实际中却不是的。<br />而A*算法有一定的评估思想,在大部分情况下,可能会得出更快的结构。<br /> <br />为什么A*得到的不是最优解,因为评估值可能出差很大,导致搜索顺序原创 2011-02-21 20:09:00 · 687 阅读 · 1 评论 -
国内 ACM Online Judge 列表
浙江大学 http://acm.zju.edu.cn 北京大学 http://acm.pku.edu.cn/JudgeOnline天津大学 http://acm.tju.edu.cn 厦门大学 http://acm.xmu.edu.cn/JudgeOnline福州大学 http://acm.fzu.edu.cn 华中科技 http://acm.hust.edu.cn/Jud原创 2007-01-01 13:15:00 · 1829 阅读 · 0 评论 -
DFS回溯遍历
以前想做DFS,不知道回溯怎么用代码实现,现在发现很简单,用回溯的递归就能搞定。 PKU ACM 3140,4107,1655,3099都是类似的例子。 好多问题都可能归结成当前子树的规模,DFS,就是对某一个节点的所有没有访问的子节点一个个访问,最后归结起来就能返回。 帖一些回溯的代码:下面的代码解决了三个问题:1:n皇后,2找出一个集合中所有满足某个条件的子集,3显原创 2006-12-18 16:12:00 · 1344 阅读 · 0 评论 -
迭代学习
原题: 给n个项链,每个项链有价值vi,重量wi的属性, 选出k个,让SUM(vi)/SUM(wi)最大。 原题地址:http://acm.pku.edu.cn/JudgeOnline/problem?id=3111采用方法是迭代:令F(x)= (Vi1+Vi2+...+Vik) - x*(Wi1+Wi2+...+Wik);F(x)关于x单调,故收敛。原题在这个式子可以体现成原创 2006-11-28 11:59:00 · 1245 阅读 · 0 评论 -
STL对字符串排序
利用STL的确可以事半功倍。前几天遇到了要对字符串进行排序。STL不支持对char 数组排。后来问人,应该这样: string str[n]; string 数组 str[i] = &c[i][0] string其实可以由char 数组转化,前提是最后一个char为NULL then sort( str, str+n);原创 2006-11-21 21:14:00 · 2039 阅读 · 0 评论 -
递推例子
题目是pku acm 3088http://acm.pku.edu.cn/JudgeOnline/problem?id=3088要求出组合的数量。 令dp[i][p]为有i个数字,而必须用p个的种类。 则dp[i][1] = i; (j==1) dp[i][p] = C[i][p] * dp[p][p]; (p>1 pdp[i][i] 可以理解成两种情况之和 1:原创 2006-11-21 12:03:00 · 932 阅读 · 0 评论 -
多边形是否重叠
题目:多边形是否重叠(有可能是凹多边形,有点重叠了就算。pku acm 3082题目)。 可以分为几种情况: 点点是否重叠 点是否在线上 点是否在在多边形内部,最后一个是关键。 判断点P是否在多边形中是计算几何中一个非常基本但是十分重要的算法。以点P为端点,向左方作射线L,由于多边形是有界的,所以射线L的左端一定在多边形外,考虑沿着L从无穷远处开始自左向右移动,遇到原创 2006-11-08 10:52:00 · 3765 阅读 · 0 评论 -
大整数的N次幂对某个整数求余算法
由于数目比较大,不能算出来再求余。 所以需要观察性质。 假设要求: (X.^N) mod m 解 X = m *n +y y为X mod m 的余数,n = X/m取整,则(X.^N) mod m = y.^N mod m所以有算法 :ans = 1; p =Nfor(base=y;p;p/=2,base=(base*base)%m)原创 2006-10-30 00:10:00 · 5688 阅读 · 0 评论 -
策略游戏 图
#include using namespace std;//评论: 算法1效率底下,是因为重复计算相同的值,而动态规划将浪费大量的时间计算不需要的中间值//可以结合这两者的优点,得出算法3// 游戏规则:n个棋子,两个人轮流取,最后一次取完者赢。当前取得棋子数量在1到2*k(k: 对手在上步取的数量)////算法1int min(int a, int b){ if(a return a原创 2006-10-24 22:31:00 · 894 阅读 · 0 评论 -
堆
#include using namespace std;int Data[1001]; //下标从1开始计算,数组长度不包括下标0void alter_heap(int T[], int n,int i, int v); //改变对的一个值void sift_down(int T[],int n, int i);//向下移void percolate(int T[],int n, in原创 2006-10-23 21:38:00 · 641 阅读 · 0 评论 -
动态归化 找零钱
/*动态规划 找零钱10月18,2006版本1薛向旭//算法意思为:要用最低j个面值找好i的钱,那么分为两种情况,1:只用j-1个面值 2 至少用一个第j面值,在这两种情况中取一个小的,而这两种情况都有一个参数比要求的表达式的参数小。所以可以递推出来。我认为算法的核心是:确认上一步的成果,并利用之。*/#include using namespace std;#define INF 9999原创 2006-10-18 11:25:00 · 1647 阅读 · 1 评论 -
网络加密如何协商密钥
方法应该有很多种: 双方提前制定好加密算法和密钥,但危险就是有人泄露了密钥和算法。 所以最好就是有个密钥动态生成,然后双方协商,但还不能让别人知道。 https采用的ssl: 1) 服务动态生成一对公钥A和密钥B(非对称加密),然后把公钥A发送给客户端,客户端自己动态生成一个对称密钥C,然后通过公钥A 加密后发送给服务器,服务器通过密钥原创 2012-12-05 18:36:00 · 3686 阅读 · 2 评论