摘要: dfs,O(2^16)   阅读全文
posted @ 2011-02-01 14:27 金海峰 阅读(691) 评论(0) 推荐(0) 编辑
摘要: dfs,搜索所有的操作方法,O(2^16)   阅读全文
posted @ 2011-02-01 14:27 金海峰 阅读(679) 评论(4) 推荐(0) 编辑
摘要: 题意:平面上有一些点,现要求用一些圆心在x轴上的圆(雷达)来覆盖这些点,问最少需要多少雷达。分析:我的解法是把点按横坐标排序,然后把每个点的雷达尽量往右放,然后每放一个雷达都要保证雷达左面的岛都被雷达所覆盖。所以我们可以按一个点靠右放完雷达后,再根据后面的在雷达位置左面的点,把雷达向左移。一个雷达经过了移的过程,就一定是能覆盖左面的岛。所以排好序后,只需O(n)。注意:unique函数的返回值是结尾指针,所以可以用被注释掉两行的方法来获得数组长度。标准方法是把每个点的放置雷达的区间求出,然后按照区间排序。排好序后,从左至右看,当发现下一个区间的起始点大于前面所有区间的最小结束点的时候,答案加一 阅读全文
posted @ 2011-02-01 14:26 金海峰 阅读(4390) 评论(0) 推荐(0) 编辑
摘要: 本来想二分,后来发现一个函数就解决了。   阅读全文
posted @ 2011-02-01 14:24 金海峰 阅读(557) 评论(0) 推荐(0) 编辑
摘要: 本题中最多5个命题变项:p,q,r,s,t 每个有0,1两种取值,所以总共32种情况,分别枚举即可。 对于每种情况,计算表达式的值,如果有结果为0的则输出not 难点在于如何计算表达式的值,我们采用递归的方法,把表达式分为一或两个子表达式,并把参数end(本表达式的结束位置)传给上一层,一遍上一层获取第二个子表达式的起始位置。最后通过两个子表达式的结束位置,得到整个表达式的结束位置。 en... 阅读全文
posted @ 2011-02-01 14:23 金海峰 阅读(1794) 评论(1) 推荐(0) 编辑
摘要: 最大的难点在于读题,全年十二个月,有8个连续的五个月,1~5,2~6,…… 确定了s和d,8次报告中每次报告有五种选择(i次s,(5-i)次d,i = 0~4),在这五种情况中必然是选择最优的,即亏损且亏损值最小。假设我们按某种顺序安排好了这五个月哪些是亏,哪些是盈。我们就可以让12个月以此5个月为循环构成。然而想要让d在12个月中出现得尽量少,就必须在安排5个月的时候把s排在前面,d排在后面。... 阅读全文
posted @ 2011-02-01 14:23 金海峰 阅读(1076) 评论(0) 推荐(0) 编辑
摘要: 本题的图与其他题稍有不同,本题以左下角为(0,0)点,列号对应x,行号对应y。 完全模拟即可。   阅读全文
posted @ 2011-02-01 14:22 金海峰 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 本题是简单的模拟,使用双层vector嵌套存储棋子的位置和种类,然后分别对每个vector进行排序 注意:排序方法为sort(piece[i].begin(), piece[i].end(), cmpWhite); 当然,cmpWhite是比较函数,可以不加比较函数,只用用前两个参数。   阅读全文
posted @ 2011-02-01 14:21 金海峰 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 可以认为这是一道简单的字符串处理题,只要把相应的值填入map对应的位置,然后把map输出就行了   阅读全文
posted @ 2011-02-01 14:20 金海峰 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 这一题学到的东西太多了 1.大数组不能开在函数中,要使用全局变量 2.bellman_ford算法 3.c语言中struct不能有构造函数,开数组不能使用const的值作为大小,而要用define. 4.代替vector的建图方法,数组模拟链表法,map[i]存第i个点的第一条边在e中的下标。e用来存边,next记录该点的下一条边的坐标。 5.使用vector的效率极低。 本题只需建正... 阅读全文
posted @ 2011-02-01 14:19 金海峰 阅读(1396) 评论(0) 推荐(0) 编辑
摘要: 错了好多次,原因有,path是双向的,开始没考虑到。边的数组应开到2500*2 + 200。图式不连通的,要把图的各个部分都覆盖到。 本题用spfa算法,判断是否有负权回路。若松弛过程中存在某点的入队次数=n,则说明有,否则没有。 阅读全文
posted @ 2011-02-01 14:18 金海峰 阅读(2039) 评论(0) 推荐(0) 编辑
摘要: 题意:每个人都有一个物品,对应一定的钱数,想要得到此物品可以直接出钱,也可以通过用其他人的物品并添加一些钱来交换,问要得到酋长的物品最少需要多少钱?另外,每个人都有一个等级,要求和你交易的人中不能有任何两人的等级相差m以上。分析:我们可以把本题理解为,我们要买一号物品,而一个物品的一部分价值可以转化为别的物品,我们通过购买别的物品和加钱来购买获得一号物品。所以我们可以把需要加的钱数作为该物品到别的物品的一条边,走过这条边,我们要花一些钱,然后我们只需要购买现在所在结点的物品即可。这样就把问题转化为最短路问题,用dijkstra就可以了。本题还有个等级制度的问题。我们可以每次枚举一个宽为m的等级 阅读全文
posted @ 2011-02-01 14:16 金海峰 阅读(2858) 评论(2) 推荐(3) 编辑
摘要: dijkstra 把存最短距离的数组改为存储frog distance即可   阅读全文
posted @ 2011-02-01 14:15 金海峰 阅读(283) 评论(0) 推荐(1) 编辑
摘要: floyd算法,floyd过后查看每个点传播消息需要的时间,把最小的点输出即可。   阅读全文
posted @ 2011-02-01 14:14 金海峰 阅读(751) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一些货币之间的单向汇率,问一笔钱能否经过若干次对换而增值。分析:根据输入建立有向图,不能使用dijaskra,因为增值的方法不一定是优先选择最小的路径,并不是贪心所能解决的。所以要用以动态规划为基本思想的floyd来做。#include <iostream>#include <string>#include <vector>using namespace std;const int maxn = 31;struct edge{ int x; double l; edge(int xx, double ll):x(xx),l(l... 阅读全文
posted @ 2011-02-01 14:13 金海峰 阅读(931) 评论(0) 推荐(0) 编辑
摘要: 简单题,只要对所有的数字求出cycle number即可   阅读全文
posted @ 2011-02-01 14:00 金海峰 阅读(683) 评论(0) 推荐(0) 编辑
摘要: 水题,排序   阅读全文
posted @ 2011-02-01 13:59 金海峰 阅读(501) 评论(0) 推荐(0) 编辑
摘要: 这是一道简单题,但是我错了n次。 开数组的时候一定要注意范围,不要直接maxn;   阅读全文
posted @ 2011-02-01 13:58 金海峰 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 水题,注意判断是不是整分钟读完,如果不是,去尾进一。   阅读全文
posted @ 2011-02-01 13:58 金海峰 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 赤裸裸的01背包   阅读全文
posted @ 2011-02-01 13:57 金海峰 阅读(661) 评论(1) 推荐(1) 编辑