摘要: 就是暴力搜索,用f[i]为0为1代表是否能够构成着一种,如果能就是1不然就是0,然后代码就出来了:#include <stdio.h>#include <stdlib.h>char f[35001];int main(int argc, char **argv){ int i, j, max = 0; int m, n, a; scanf("%d%d", &m, &n); f[0] = 1; for(i = 1; i <= n; i++){ scanf("%d", &a); for(j = max; 阅读全文
posted @ 2011-09-25 18:47 zqynux 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 这题让我学到了一个技术啊,那个什么线段树神马的都是浮云,真的是浮云,查并集才是王道,用好查并集线段树可以秒杀,空间需求更低,效率更高,为什么不用查并集呢!!! f[i]代表i节点所在的集,d[i]代表i距离f[i]之间有多远, 然后更多题解看我转的内容: 初看本题,似乎没有思路,动态规划、贪心、递推等常规方法似乎行不通。但仔细观察题目条件,发现原体实际是告知一部分线段的和,求未知线段的长度。这个问题显然是并查集(注意:与线段树相区分)。 利用一个数组f[i]记录当前位置的父亲,即使用父亲标记法实现并查集。另一个数组d[i]表示当前元素父节点到当前元素的线段长度。显然,位于同一个集合中... 阅读全文
posted @ 2011-09-25 14:12 zqynux 阅读(540) 评论(0) 推荐(0) 编辑
摘要: SPFA,纯搜索,如果走到下一个位置的体力可以更少那就用那个更少的,如果一样多,看走的步数,用少的,就这样一个广搜。 代码如下:#include <math.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#define QMAX 25000struct node{ int x, y;}queue[QMAX];int head, rear;int map[500][500];int used[500][500];void enqueue(int x, int y){ if(use 阅读全文
posted @ 2011-09-25 08:12 zqynux 阅读(425) 评论(0) 推荐(0) 编辑