![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 77
RookieGD
游戲開發學習
展开
-
最长公共递增子序列(C++实现)
典型的动态规划题目,可以吧题目转化为最长公共子序列问题,输入一个序列,然后将其排序,储存在另一个数组中。 然后求两个数组的最长公共子序列,求出的最长公共子序列即为输入序列的最长递增子序列。本文还有一个关键部分就 是输出所有的最长递增子序列,代码中使用了一个path[N+1][N+1]数组记录过程,并用回溯的方法输出。 #include #include using namespac原创 2012-03-25 12:29:14 · 3331 阅读 · 1 评论 -
poj2240
转自:http://blog.sina.com.cn/s/blog_803d08c00100xqj6.html 用bellman-ford算法来做。 声明一个边的数组,然后dist【i】表示它能兑换的源点货币的数目,初始化时,把源点设为1,其他点设为0,松弛函数的话,如果起点能兑换的数目少于终点能兑换的数目乘以利率,就更新。 #include #include #include转载 2012-07-20 23:27:10 · 375 阅读 · 0 评论 -
poj1125
用floyd就可以实现,先用floyd求出两辆之间传播谣言的最短时间,然后我们知道,在二维数组中,第n行就是第n个人,跟其他人传播谣言的最短时间,那么这行中时间的最大值就是传遍所有人所需的最短时间。比较每行的最长时间,取最小的。如果最小值超过了10(题目说时间不超过10),则输出disjoint,反之输出时间、原点。 代码如下: #include using namespace std; co原创 2012-07-20 22:54:15 · 455 阅读 · 0 评论 -
poj1860
一种货币就是图上的一个点 一个“兑换点”就是图上两种货币之间的一个兑换环,相当于“兑换方式”M的个数,是双边 唯一值得注意的是权值,当拥有货币A的数量为V时,A到A的权值为K,即没有兑换 而A到B的权值为(V-Cab)*Rab 本题是“求最大路径”,之所以被归类为“求最小路径”是因为本题题恰恰与bellman-Ford算法的松弛条件相反,求的是能无限松弛的最大正权路径,但是依然能够利用bellma原创 2012-07-20 23:23:23 · 432 阅读 · 0 评论 -
poj3259
第一次使用bellman-ford,与迪杰斯特拉相比,同样是求单源最短路劲,但是bellman-ford可以求负权最短路。方法就是对边进行松弛操作,这题基本就是算法的实现而已,并没有什么变形。 /*bell-manford and spfa*/ #include #include using namespace std; const int MAXN = 10000; int dis[MA原创 2012-07-20 23:41:21 · 421 阅读 · 0 评论 -
poj2112 Optimal Milking
由于之前没做过多重二分匹配问题,所以一直没有头绪,折磨了我好久,后来看到别人用二分查找+floyd+网络流 来实现,自己也就用这种方法A掉了。 具体方法是: 1)先用floyd求到任意milking machine到 任意奶牛之间距离 2)查找到最长的一条距离,并记录下来为max,那么我们就可以知道,要求的值就是在 [0,max]区间 3)下面就开始二分查找了,找到0到max之间,最小的原创 2012-08-01 09:22:55 · 1316 阅读 · 0 评论