摘要: 说点自己的理解。Hash 是散列的意思,所谓的散列,可以理解为将字符串转换为固定长度(一般是更短长度)的数值或索引值的方法。数据结构书上提到的构造hash函数的方法有四种:平方取中法、折叠法、除留余数法,直接定址法。 此外,有了hash函数就有冲突,就是说可能两个不同的字符串经过hash函数处理后的结果相同。解决冲突的方法有:开放定址法、链地址法;hash例题见:http://www.cnblogs.com/vongang/category/316530.html 阅读全文
posted @ 2011-08-19 20:37 AC_Von 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 典型的贪心题目,做过很久了,今天复习贪心,回头看了看,顺便把报告补上。我的思路是做一个标记变量flag和一个计算的变量k(k = n),flag初始为0,每次找一个满足(l <= l' && w <= w' && !flag)的序列,并将序列元素的flag标为1,总序列就会减少一个数所以k--,找完一个序列,结果ans++。然后回头再找第一个falg = 0的元素,确定新的序列。如此循环。。。代码:#include <iostream>#include <cstdio>#include <cstdlib& 阅读全文
posted @ 2011-08-19 19:34 AC_Von 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 这道题整了一下午,最后还是看别人的解题报告弄出来的,先说说我的理解吧。大体处理思路是利用贪心思想,每次取权值最大的节点,不断的将权值最大节点与它的父节点合并。过程:1、初始时将序列中的time[i]都置为1,w[i]置为c[i];2、查找最大的w[i], 返回其位置;3、将该位置的c[]与它的父节点c[]合并(合并过程就是C_i / T_i,C_i = c[该节点] + c[父节点],T_i = time[该节点]+time[父节点])得到新的父节点w[](w[父节点] = C_i / T_i),如果有节点与pos相连,让它指向pos的父节点;4、重复2、3,知道合并完;至于如何求出结果:初. 阅读全文
posted @ 2011-08-19 18:31 AC_Von 阅读(1597) 评论(0) 推荐(0) 编辑
摘要: 这道题思路。。。想破脑袋没想起来,开始按A排序,后来按B排序,再后来按A/B排序,然后正序走一遍,逆序走一遍,都不对!最后看的解题报告,崩溃!!!按B-A排序。至于证明,不会!这道题告诉我们,关于贪心问题,只要涉及到排序,+,-,*,/,都试试,没准有一个可以的。。。#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;const int N = 1007;struct node{ int a; int b;}num[N];int cmp(const void * 阅读全文
posted @ 2011-08-19 10:01 AC_Von 阅读(302) 评论(0) 推荐(0) 编辑