2015年10月29日

poj2676(数独)

摘要: 也是一个简单剪枝的dfs。记录所有为0的位置,依次填写,当发现某个空格可选的填写数字已经没有时,说明该支路无效,剪掉。不算是一个难题吧,但是还是花了不少时间,问题主要出在细节上,行列坐标反了、3乘3小格的位置判断等。写程序一定要细心。#include using namespace std;cons... 阅读全文

posted @ 2015-10-29 15:09 caiminfeng 阅读(955) 评论(0) 推荐(0) 编辑

poj2531(深搜剪枝)

摘要: 题意就是把节点分成A、B两组,节点间距C给了,要求解分组的方法,使得∑Cij (i∈A,j∈B)最大。首先把所有节点都放在一组,然后采用深度优先搜索的方法,对每一个节点都做判断是否应该移到另一组去,判断的依据是移过去和不移过去哪个得到的和值比较大(这里移去B组后的计算方法就是加上该点和在A组中的所有... 阅读全文

posted @ 2015-10-29 11:32 caiminfeng 阅读(2606) 评论(0) 推荐(0) 编辑

2015年10月27日

poj1789(prim)

摘要: prim和kruskal都是求解最小生成树的算法。这道题题意就是有N个字符串就是N个节点,而字符串之间的距离就是节点边的长度,求其最小生成树的边权和。由于是第一次用prim,所以在求安全边的时候采用的是暴力的方法,所以我这个算法是O(n^2)的,跑了近1500ms,吓出一身冷汗……如果采用优先队列或... 阅读全文

posted @ 2015-10-27 20:02 caiminfeng 阅读(529) 评论(0) 推荐(0) 编辑

poj2965

摘要: 原本以为这道题跟1753是基本一样的,改改状态的更新方式就好了,不过在discussion里看到了别人贴的高效解法,这里引用一下:参考高手的高效解法:> 证明:要使一个为'+'的符号变为'-',必须其相应的行和列的操作数为奇数;可以证明,如果'+'位置对应的行和列上每一个位置都进行一次操作,则整个图... 阅读全文

posted @ 2015-10-27 15:39 caiminfeng 阅读(205) 评论(0) 推荐(0) 编辑

2015年10月26日

poj1753

摘要: 简单的BFS,加上用位操作来定义和改写状态。ac时运行了100多ms,看discussion里面有人跑的很快,应该有更优化的方法吧,没细究了。#include #include using namespace std;const int ROW = 4;const int ajacent[4][2]... 阅读全文

posted @ 2015-10-26 17:01 caiminfeng 阅读(247) 评论(0) 推荐(0) 编辑

2015年10月24日

排序总结

摘要: 各种排序方法的C++实现以及复杂度。 下面摘录维基上的排序的比较 阅读全文

posted @ 2015-10-24 11:39 caiminfeng 阅读(209) 评论(0) 推荐(0) 编辑

2015年10月23日

poj2299(树状数组+离散化)

摘要: 这道题题意很简单,就是求逆序数。用暴力的方法是显然会超时的。这里考虑采用树状数组。采用树状数组话遇到的问题就是需要999,999,999个空间来存放数据,这显然是不可行的。考虑到输入数据最多只有500,000个,那么可以采用离散化的方法来先将输入数据进行映射到较小的空间上,然后再用一般的树状数组操作... 阅读全文

posted @ 2015-10-23 12:16 caiminfeng 阅读(1551) 评论(0) 推荐(0) 编辑

2015年10月21日

poj2485(Kruskal)

摘要: 这道题显然是一道最小生成树的问题,参考算法导论中的Kruskal方法,先对路径长度进行排序,然后使用并查集(Disjoint Set Union)来判断节点是否连通,记录连接所有节点的最后一条路径的长度即为最大的长度了。下面的并查集算法还可以通过设置rank数组记录节点的等级来进一步优化。总的来说还... 阅读全文

posted @ 2015-10-21 11:44 caiminfeng 阅读(269) 评论(0) 推荐(0) 编辑

2015年10月13日

poj3259(spfa)

摘要: 自己的第一道spfa,纪念一下,顺便转载一下spfa的原理。先po代码:#include #include using namespace std;const int MAX = 999999;const int MAXN = 501;int minimum(int a, int b){ re... 阅读全文

posted @ 2015-10-13 21:48 caiminfeng 阅读(324) 评论(0) 推荐(0) 编辑

2015年10月12日

poj1860 & poj2240(Bellman-Ford)

摘要: 1860的思路是将可以换得的不同种的货币的数量当作节点,每个兑换点当成边,然后我抄了个算法导论里面的Bellman-Ford算法,一次就过了。看discussion里面很多讨论精度的,我想都没想过……2240是更简单的一个bellman-ford,基本和1860一样,就只多了个map容器的应用而已。... 阅读全文

posted @ 2015-10-12 16:47 caiminfeng 阅读(158) 评论(0) 推荐(0) 编辑

导航