自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(266)
  • 资源 (10)
  • 收藏
  • 关注

原创 Blog 迁移地址

新blog地址

2014-08-02 22:54:41 903

原创 由一个问题引发的网络知识解惑

1、本地ip与网上查询到ip不一致?本地ip:(内网ip)宽带ip:(外网ip)二者的区别在于:本地ip是网卡上所拿到的ip,可有路由器进行分配(DHCP协议)宽带ip是电信运营商自动分配给你的宽带连接二者的关系相当于:宽带ip就是街道号,本地ip就是门牌号,如果要找到你的家门首先需要通过宽带ip(外网ip)找到你的街道号,然后通过本地ip(内网ip)找

2013-05-05 17:31:16 1199

原创 排序算法

冒泡排序,稳定,复杂度n*n选择排序,不稳定,复杂度n*n不稳定:快速排序,递归实现,不稳定,复杂度n*log(n),空间复杂度堆排序,大小顶堆实现,不稳定,复杂度n*log(n)稳定:在快速排序中添加另外一个控制变量合并排序,两个有序队列合并1、快速排序示例//快速排序示例#include #include int p[50];int le

2013-04-18 09:05:41 869

转载 [分享] Vmware与主机间共享文件的七种方法(附图+详解)(转)

【原创】Vmware与主机间共享文件的七种方法(附图+详解)                       —By:adbrave相信很多玩电脑的人都用过Vmware吧?(Vmware是虾米东西?倒!点下这里就知道了),不过好多人都不清楚如何在本机和虚拟机间共享文件和数据,那么今天我就给大家分享下我所知道的方法,如果你也有不错的方法或本文有什么错误请告诉我,谢谢!

2013-03-15 09:22:51 928

原创 HDU Running Rabbits(模拟)

/*模拟题,做的比较有感觉以前不太擅长做模拟题,因为总是模拟中找公式,所以往往会复杂很多①处,原来想直接用公式求出下一步坐标,结果太麻烦。后来直接用一个for()循环实现,简单很多*/#include int N;void fgo(int &d, int &x, int &y, int s){ int i; switch(d) { case

2012-10-31 21:34:05 682

原创 hdu 4417 Super Mario(线段树)

/*首先对问题进行转换,将数据分别用数组做存储,按h大小进行排序,然后从小到大进行询问操作,每次操作之前,首先将第一个数组中h值比这个值小或等于的入队,于是问题转换为线段树问题*/#include #include #include using namespace std;const int nMax = 100007;struct Tree{ int l, r;

2012-10-09 17:28:31 1064

原创 hdu 4414 Finding crosses(模拟)

#include #include #include using namespace std;const int nMax = 55;int N;char map[nMax][nMax];int ans;//int vis[nMax][nMax];int checklr(int x, int y){ if(map[x][y] == '#' && map[x][y

2012-10-09 10:04:00 851

原创 HDU 4283 You Are the One(区间DP)

/*这道题才真正接触到区间DP的思想d[i][j]:表示从第i个到到第j个人的最小值,那么第i个人可以是第一个出,也可以是最后一个出,假设是第k个出,则区间可分为[i + 1, i + 1 + k - 1 - 1],d[i + k, j]前者肯定是在k之前出,后者在k之后,于是转换为区间DP问题其中需要对后者做一下处理,加上(k - 1) * (sum[j] - s[i + k - 1])

2012-09-21 20:25:05 789

原创 HDU 4295 4 substrings problem(状态压缩)

/*内存超了,这道题原来不想做,后来打算只要把数据过了就行结果内存超了,状态压缩,具体思路参见:http://acmicpc.info/archives/915*/#include #include const int INF = 4100;int d1[4096][16][64], d2[4100][16][64];char S[4100], a[4][70];int can

2012-09-21 12:29:57 945

原创 HDU 4293 Groups(区间DP)

/*具体思路参见:http://hi.baidu.com/dispossessed/item/320544233e27109b9c63d1a6将每组数据转换为区间以后,然后按照x从小到大排序,便可以用DP来做。注意不符合条件的排除,①处的作用*/#include #include #include const int nMax = 507;int d[nMax];int N;

2012-09-20 22:51:03 663

原创 HDU 4292 Food(拆点,最大流)

/*最大流问题拆点:增加超级源点和汇点,源点于食物相连,边的权值为食物最大量;饮料与汇点相连,变得权值为饮料的最大量;将人拆分成两个,一个与食物相连,一个与饮料相连,权值可以为1也可以为INF,无影响。将拆分后的两个节点相连,边的权值为1*/#include #include const int nMax = 2007;const int INF = 0x3fffffff;i

2012-09-20 12:38:43 1197

原创 HDU 4289 Control(拆点,最大流)

/*拆点:将每一个节点拆为a,a1,边的权值给节点的最小消耗,如果节点a、b之间原来有边相连,则a1,b和b1,a之间连接两条边,权值为INF。于是转换为最大流问题新收获:我原来打算用vector存储邻接表,最后发现反向遍无法处理。终于明白了②、③处的用法,目的方便对反向遍进行运算。异或使两边对应起来*///dinic实现#include #include #include

2012-09-19 21:04:03 892

原创 HDU 4296 Buildings(贪心)

/*贪心:s2 - w1 > s1 - w2*/#include #include const int nMax = 100007;struct Node{ int wi, si;}node[nMax];int N;int cmp(const void *a, const void *b){ Node *pa = (Node *) a; Node *pb = (Nod

2012-09-19 13:15:54 730

原创 HDOJ 4288 Coder(线段树)

/*线段树很强大,这个应该也属于区间处理、多次查询的问题,所以要用到线段树解决。sum[]分别表示区间内%5余数之和,cnt表示区间内总个数首先离散化,然后建立线段树(让线段树中l,r与A[]数组相对应起来),然后添加和删除元素即可*/#include #include #include const __int64 nMax = 100007;__int64 N;struc

2012-09-19 11:53:37 854

原创 网赛题解

成都赛区:1001:线段树1002:最大流1003:1004:矩阵相乘1005:最大流1006:区间DP1007:1008:DP1009:贪心1010:

2012-09-19 10:13:32 1282

原创 HDOJ 4291 A Short problem(Fib矩阵相乘)

/*类似fib数列,矩阵相乘,取模,所以肯定会出现循环节,不知道为什么一定是从0、1开始循环的*///求循环节#include #include const __int64 M = 222222224;using namespace std;__int64 a[4], b[4];int main(){ set se; __int64 i; __int64 f1 = 1

2012-09-18 10:49:19 739

原创 HDOJ 4271 Find Black Hand(最短编辑距离)

/*A一道题,真心觉得不容易,各种情况要考虑。不过是一道经典DP问题首先这道题,是一道最短编辑路径问题,很久以前做过这类问题,一直没做了,所以看到这道题时候根本没有往DP方面想。d[i][j]表示,母串ss[i]得到子串s[j]的最小编辑次数,并且i与前面的操作相连。然后这道题,可以出现环,具体处理将母串复制一遍添加到后面。但是同一个字母不能用多次,所以需要分情况处理。比如母串:abcd

2012-09-15 21:41:57 1057 1

原创 HDOJ 4267 A Simple Problem with Integers(线段树)

/*显然这道题应该用线段树来做,区间更新、多次查找,然而线段树中状态比较多,需要用多个线段树来表示这些状态。原来线段树中c[][]为一个二维数组,c[k][u],其中k表示余数,u表示a%k,这样共有55种情况,不过最后内存超,然后用一维表示,通过。思路:(i - a) % k == 0 可以等效于 i % k == a % k*/#include #include const i

2012-09-14 20:59:52 791

原创 HDOJ 4272 LianLianKan(简单模拟)

//这么一个水题,当时居然没有做,模拟就行#include #include using namespace std;int main(){ int N; while(scanf("%d", &N) != EOF) { int a; int i, j, k; stack sta; for(i = 0; i < N; ++ i) { scanf("%d",

2012-09-14 17:15:32 668

原创 POJ 2411 Mondriaan's Dream(状态压缩)

/*正常求解超时,然后打表通过。自己定义状态,我的解法横木块[0,0],竖木块[1,0],其中1表示下层。也可以横木块[0,0],竖木块[1,2],不过会多出一个状态,需要3进制表示。*///打表程序#include #include __int64 h, w;__int64 d[11][1 << 11];__int64 check1(__int64 x)//相连的0必须为

2012-09-13 10:31:09 963

原创 POJ 1185 炮兵阵地(状态压缩)

/*推荐:经典状态压缩我原来四进制表示,结果果断超时!解题关键:假设一行所有列均为P,将所有可行状态,存储到数组A[]中,经过计算,状态最多有60种,然后再进行DP。否则很容易超时。d[i][j][k]:表示第i-1行状态为j,第i行状态为k,最大炮兵数。如果只是d[i][j],则无法从前面状态推导,虽然前两行状态可以知道,但会存在冲突。而d[i][j][k]则可有效避免,因为前两行

2012-09-12 20:57:26 531

原创 最短路经问题

Prim算法:主要处理问题:最小生成树问题。算法思想:V表示所有节点集合,首先s进入集合U,然后找出集合U与剩余节点V-U中最小权值的边[u,v],将v加入集合U,直到U==V截至时间复杂度:相对与Kruskal需要多次排序,>>O(E)Kruskal算法:推荐主要处理问题:最小生成树问题。算法思想:对所有边按照权值进行排序,然后使用并查集,将所有节点加入到集合中。

2012-09-12 09:41:36 1032 2

原创 HDOJ 4276 The Ghost Blows Light(最短路+树形DP)鬼吹灯问题

/*参考:http://nightelf.sinaapp.com/2012/hdu-4276.html鬼吹灯问题题意:每个坟墓都有一些珠宝,从一个坟墓到另一个坟墓需要耗费掉一定的时间,问从1到N,在规定时间T内,最多可以得到珠宝数思路:最短路+树形DP,找出从1到N的最短路,因为任何两点间只有一条路,所以最短路中所有边都为必走的边。所以从1到N的路径,都为最短路,然后加上从最短路中某些个

2012-09-11 20:40:38 1101

原创 HDOJ 4277 USACO ORZ(set判重+dfs)

//判重 + 剪枝,状态压缩做会超时,需要做一些优化#include #include #include using namespace std;const int nMax = 17;int N;int A[nMax];int SUM;void swap(__int64 &a, __int64 &b){ __int64 temp = a; a = b; b = te

2012-09-11 20:39:34 716

原创 HDOJ 4268 Alice and Bob(贪心)

/*第一次使用集合set这一类问题思路:对这2*n个元素进行排序,排序时候需要注意一点,如果h、w都相等时候,第二类需要排到前面。然后贪心,历遍所有元素,如果是第二类元素,进入集合;是第一类元素,则从堆中找出符合条件的w最大的元素,然后移除集合。推荐:③的使用*/#include #include #include using namespace std;const int

2012-09-10 22:01:21 619

转载 [转] ACM的你伤不起!!!

劳资六年前开始搞ACM啊!!!!!!!!!! 从此踏上了尼玛不归路啊!!!!!!!!!!!! 谁特么跟劳资讲算法是程序设计的核心啊!!!!!! 尼玛除了面试题就没见过用算法的地方啊!!!!!! 谁再跟劳资讲算法之美算法的力量,劳资一本算法导论拍死你啊!!!!!!!! 那是搞ACM的入门书啊!!!!特么的入门书就一千多页啊!!!!!!! 还没有习题答案啊,学完了你特么都不知道

2012-09-09 18:56:57 1903

原创 Windows7系统能上QQ 打不开网页解决办法

WIN7能上QQ 打不开网页解决办法 方法一:进入控制面板→程序和功能→左边框有个“打开和关闭windows功能” 点击后,先把IE8的勾去掉,之后系统就执行的是IE8的卸载,然后重启电脑。重启电脑之后,再次重新进入该选项,选择勾选IE8.0,这样就可以修复并安装IE8了,重启电脑,IE也许就可以上网了。 方法二:如果你装了360安全卫士,有可能是360的问题了,最近360

2012-09-09 18:39:03 1570

原创 POJ 1947 Rebuilding Roads(树形DP + 01背包)

/*01背包(最小价值) + 树形DP,做的第一道树形DP问题思路:d[i][j]:以i为跟的树,选j个节点,根必选原来一直Runtime Error,最后发现①处的问题,漏了N*/#include #include const int nMax = 157;const int INF = 0x3fffffff;int next[nMax];int head[nMax];in

2012-09-08 21:43:27 615

原创 POJ 2486 Apple Tree(树形DP + 01背包)

/*树形DP + 01背包思路:首先bfs将图转变为树,然后dfs进行动态规划。有两种状态,其中d[0][i][j]表示直通,d[1][i][j]表示返回到i节点①、②处,曾经出错临界状态的初始化,始终感觉是个难点,一直没有搞清楚。最后在测试数据1 11的时候发现问题。*/#include #include const int nMax = 107;const int mM

2012-09-08 21:24:50 593

原创 POJ 2353 Ministry(双向DP)

/*题意:矩形M*N,要求:只能向下、向左、向右走,求从第一层到最后一层费用最小的路径。思路:双向DP(其实就是两个for循环),因为最佳路径只有三种从上、从左、从右,所以只需要三个循环即可原来使用Dijskra中寻找最短路径的方法,果断超时!*/#include #include const int mMax = 107;const int nMax = 507;int m

2012-09-06 16:52:59 1253 1

原创 POJ 1157 LITTLE SHOP OF FLOWERS(动态规划)

/*题意:每行选一个数,下一行选得数只能在这一行后面,求选出所有数的最大和。很容易的一道题,原来只使用了一个数组d[],结果运算中出现很多情况,而且最后发现思路根本就是错误然后增加一个数组d1[],问题变得很容易。状态转移方程:d[i][j] = max(d[i - 1][k] + map[i][j]),i - 1 <= k < j;d[i][j]表示加入只有i行,第i行必须选择第j列时

2012-09-05 20:13:22 625

原创 HDU 1003 最长字段和(经典动态规划)

//原来做这道题,使用刘汝佳书上的方法实现,动态规划来做,很经典的一道题#include const int nMax = 100007;struct Node{ int l, r; int sum; Node(){} Node(int l, int r, int sum):l(l), r(r), sum(sum){}}node[nMax];int main(){

2012-09-05 19:14:38 1152

原创 POJ 1088 滑雪(动态规划+记忆化搜索)

//动态规划 + 记忆化搜索#include #include const int nMax = 107;int R, C;int map[nMax][nMax];int dp[nMax][nMax];int dir[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};int fdp(int x, int y){ if(dp[x][y] != 0) ret

2012-09-05 19:09:34 799

原创 二分法

/*需要注意:①推荐l = mid, r = mid的使用②因为r的值永远取不到,r的值需要大1③最后返回时,需要做一次判断其实做题时候,找个临界状态判断一下即可*/int bsearch(int left, int right, int x){ int l = left, r = right; for(l + 1< r) { int mid = (l + r) /

2012-09-04 11:10:36 463

原创 2012暑假学习

专题赛:第一场个人赛(搜索):http://acm.hust.edu.cn:8080/judge/contest/toListContest.action;jsessionid=F5EDCEA8E884235F4A55E95C725FB4C1#11496第二场个人赛(DP):http://acm.hust.edu.cn:8080/judge/contest/view.action?

2012-09-03 21:15:02 530

原创 Trie树

一、Trie树,又叫字典树,就是将字典存入到树中,方便进行单词匹配。其实实现起来很简单,模版如下://动态分配内存struct Trie{ int count; Trie *next[26]; Trie() { count = 0; memset(next, 0, sizeof(next)); }};void buildTrie(Trie *root, cha

2012-09-03 21:08:32 494

原创 POJ 3630 Phone List(Trie树,静态数组实现)

/*这道题动态分配内存会超时先建图,建图完成后,再判断,这样不容易出错*//*解法一:Trie树,静态数组实现*/#include #include const int nMax = 200000;struct Trie{ Trie *next[10]; int count;}trie[nMax];int pos;void buildTrie(char *

2012-09-03 20:46:07 782

原创 POJ 2528 Mayor's posters(离散化+线段树)

/*这道题,真的做了很久,终于AC。①原来使用哈希判重,结果超时,其实一次历遍就行②在search()函数中,需要考虑查找成功和失败两种情况,失败情况容易忽略③其实对于“区间更新”问题,算法不存在错误,可以作为模版。至于A[l] ++ , A[r + 1] --,这个只能处理求和问题,实际对效率无太大影响,只是多一个log(n)④离散化处理的第一道问题,两重for()循环即可,一个判重

2012-09-03 19:19:38 1083

原创 POJ 3740 Easy Finding(舞蹈链)

/*舞蹈链模板题*/#include #include const int mMax = 50, nMax = 500;int map[mMax][nMax];int M, N;struct Node{ int left, right, up, down; int col;}node[mMax * nMax];//双向链表int len;int cnt[nMax];

2012-08-30 22:50:23 682

原创 HDU 4260 The End of The World(汉罗塔)

/*汉罗塔问题,要用到一个公式:假设N个盘子都在A上,那么搬到B上则需要2^N - 1次。dfs(B, pos)的作用是:将前面pos个盘子全部搬到B上所需要多少次。这样,dfs(B, pos) = dfs(C, pos - 1) + pow(2.0, pos - 1) - 1 + 1;即,先将pos - 1个盘子都放在C处,然后将最后剩余一个盘子放在B上,再将C上面的盘子都放回B处。d

2012-08-25 19:43:36 2891

JavaScript.DOM编程艺术(第2版)附录及源码.rar

JavaScript.DOM编程艺术(第2版)附录及源码.rar

2013-06-08

C和C++辞典.chm

C和C++辞典,chm

2012-05-02

ACM程序设计.pdf

ACM程序设计,pdf ,

2012-05-02

新编Win32API大全(中文版).chm

新编Win32API大全(中文版),中文版,

2012-05-02

C++STL程序员开发指南.pdf

C++,STL,pdf,C++STL程序员开发指南,

2012-05-02

MFC类库详解.chm

MFC类库详解,chm

2012-05-02

c++经典代码大全

c++,经典,代码,大全

2012-05-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除