上一页 1 ··· 39 40 41 42 43 44 45 46 47 ··· 66 下一页
摘要: 该题题意非常有意思,问是否能够时空穿梭。这题与前面所做的POJ1860很相似,只是这里说明两点:1.所以逇路都是双向的,洞是单向的。2.bellman算法中,需要虚拟出一个节点,让其能够通向所有的节点(或者直接将所有点的距离都赋值为相同值)。这样就只要一次bellman算法就可以了。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#define MAXN 6000using namespace std;int N, M, W, dis[505];struct edge{ int a, b, 阅读全文
posted @ 2012-06-30 18:14 沐阳 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 该题是给定某一货币,然后再给定一些兑换的条件,问能否使得钱币总数增加,是不是非常诱人呢?对该题的一个转化就是如果在转化的过程中出现了环的话,那么我们就可以在这个环内不停的进行转化,以致钱币数量无穷大,再反过来兑换就可以得到原始的币种了,而且一定会增加。利用bellman算法能过得到是否存在环,由于最长的环的路径长度是N-1(N各节点)所以我们只要对所有的边进行N-1次松弛,然后再看是否还可以继续松弛来判断是否有环的形成。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#define MAXN 阅读全文
posted @ 2012-06-30 16:43 沐阳 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 该题为一道纯模拟题,不需要任何算法。在选择棋子的时候定义好排序规则,将其一次排序出来。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <cctype>#include <algorithm>using namespace std;int pos = 0;int hash[255];struct Node{ char kind; int x, y; bool operator < (Node t) const { if (hash[kind] ! 阅读全文
posted @ 2012-06-30 11:16 沐阳 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 该题是个纯模拟题,只要仔细模拟就可以了,刚开始的时候自己按照自己的想法把行列关系进行了更改,结果弄得方向错乱。该证后AC。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#define MAXN 105using namespace std;int A, B, N, M, x[MAXN], y[MAXN], d[MAXN];int G[MAXN][MAXN];int dir[4][2] = {-1, 0, 0, 1, 1, 0, 0, -1};char box[MAXN]; // 接受信息s 阅读全文
posted @ 2012-06-29 20:32 沐阳 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 该题是一个模拟题,可能在理解题意上有所困难。第一个序列的意思为:a[i]表示第i个右括号的左边有多少个左括号第二个序列的意思为:b[i]表示第i个右括号跟与之匹配的左括号之间有多少左括号,包括与之匹配的左括号首先根据第一个序列将这个括号的序列进行恢复,然后再从右到左将第二个序列计算出来。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>using namespace std;int s[100], N, seq[25], rec[25];// 阅读全文
posted @ 2012-06-29 17:16 沐阳 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 该题是在给定一系列的计算逻辑的基础上,询问一个表达式是否恒为真的问题,由于构成的表达式是一个以运算符开始的先序遍历的式子,所以可以利用递归进行求解。什么是构造法呢? 1.对所讨论的对象能进行较为直观的描述; 2.实现的具体性,就是不只是判明某种解的存在性,而且要实现具体求解。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>using namespace std;char s[105];int K[2][2] = {0, 0, 0, 1}, A[2][2] = {0, 1, 1, 1};int 阅读全文
posted @ 2012-06-29 16:10 沐阳 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 这题题意是别人告诉的,现在这里表示感谢了。题目就是说给定一个盈利和一个亏损值,(一个月只可能盈利或者亏损)一年12个月,任意连续5个月的和值必须亏损。求十二个月的最大盈利是多少?解题思路:先确定前五个月的安排情况,把亏损的尽量安排靠后,然后再从2月到8月为起点进行暴力,每次能够新确定一个月的盈亏情况(根据5月之和小于零)。最后再确认12个月是否盈利。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>using namespace std;in 阅读全文
posted @ 2012-06-29 11:28 沐阳 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 以每个点算出左右覆盖的雷达所在x轴范围,然后贪心计算出所需圆的个数。当后一个点的圆心在x轴的左坐标在前一个点的右坐标的右坐标之前,则这个点就会被覆盖。代码如下:(C++能过,G++ runtime error)#include <cstring>#include <cstdlib>#include <cstdio>#include <cmath>#include <algorithm>using namespace std;int N, R;struct Node{ double l, r; bool operator < (N 阅读全文
posted @ 2012-06-28 22:55 沐阳 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 做法与1753相似。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#define START 0#define END 65535using namespace std;char G[6][6];int status, cpy, how[20], path[20], times;void pre(){ how[1] = 4383, how[2] =8751, how[3] = 17487, how[4] = 34959, how[5] = 阅读全文
posted @ 2012-06-28 12:06 沐阳 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 刚开始做这题时总是在想应该用何种的策略来进行翻装,最后还是没有想出来~~~ 这题过的代码的思路是用在考虑到每个点被翻装的次数只有0次或者是1次,所以对于16个点就只有2^16中请况了。再运用位运算将状态压缩到一个32位的整型当中,使用异或运算替代普通的运算。用dfs生成排列数。 代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#define START 0#define END 65535using namespace std;char G 阅读全文
posted @ 2012-06-28 11:12 沐阳 阅读(257) 评论(0) 推荐(0) 编辑
上一页 1 ··· 39 40 41 42 43 44 45 46 47 ··· 66 下一页