- 博客(40)
- 资源 (1)
- 收藏
- 关注
转载 alloc copy assign的区别
解释一:举个例子:NSString *str = [[NSString alloc] initWithString:@'abc'];上面一段代码会执行以下两个动作:1 在堆上分配一段内存用来存储@'abc' ,比如:内存地址为0X1111 内容为 'abc'2 在栈上分配一段内存用来存储str,比如:地址为0XAAAA 内容自然为0X1111
2012-12-09 17:54:25
758
转载 poj 3233 矩阵乘方
转载于:http://xuyemin520.is-programmer.com/posts/26387.html// A^n.cpp : 定义控制台应用程序的入口点。////2分法求矩阵冥次//Poj 3233#include "stdafx.h"#inclu
2011-09-09 17:31:05
727
原创 2分法求 2^n 和 矩阵的n次方
#include "stdafx.h"#include using namespace std;//a^nint f(int a, int n){ if(n == 0) return 1; if(n == 1) return a; int ans = f(a
2011-09-09 01:08:10
2565
原创 hdu1054 二分图最小点覆盖数
最小点覆盖数:在二分图中,选取最少的点数,使这些点和所有的边都有关联(把所有的边都覆盖)最小点覆盖数 = 最大匹配数题目中给出的树形结构,因此可以认为树形结构即为2分图。求最大匹配数时从所有的点集出发,得到的最大匹配数需要除以2.#include #include
2011-09-06 01:31:54
876
1
原创 hdu 1401 双向广搜+8进制压缩状态
// hdu 1491.cpp : 定义控制台应用程序的入口点。/*题目询问能否能从一个状态到另外一个状态而少于8步移动。每个状态为4个不同的点,即8个坐标。由于从初始状态到目标状态,和目标状态到初始状态的效果是一样,所以可以采用双向广搜。每次选取节点比较少的队列进行扩展
2011-08-30 19:16:52
1271
原创 hdu 1010DFS
//几个剪枝的方法如果不明白再问我#include using namespace std;int row,column,time;int op[4][2] = {-1,0,1,0,0,-1,0,1};char grap[10][10];int start
2011-08-15 23:49:51
1578
原创 poj 3067 树状数组
// poj 3067树状数组.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include using namespace std;const int MAXN = 1010;int sum[MAXN];
2011-08-06 23:01:53
570
原创 poj 2481 树状数组
// poj 2481 树状数组.cpp : 定义控制台应用程序的入口点。//题目要得到满足Si = Ej and Ei-Si > Ej-Sj (Si!=Sj && Ei!=Ej) 的个数//解法1:若按Ei值升序排序后,则相当于求每个位置i左边小于等于S[i]的个数.解
2011-08-06 21:27:04
419
原创 Poj 1195 二维树状数组
// poj 1195 二维树状数组.cpp : 定义控制台应用程序的入口点。//节点更新,区间求和。 #include "stdafx.h"#include using namespace std;const int MAXN = 1030;__int64 su
2011-08-06 21:08:26
400
原创 poj 2352 树状数组
// poj 2352 树状数组.cpp : 定义控制台应用程序的入口点。////题目要求每个星星左下方的星星个数,输入时星星坐标已经按照y轴升序排,并且y轴一样时按x轴升序排//所以可以用x轴坐标建立一维的树状数组,此时相当于求它前面小于它的坐标的个数。//需要注意的是
2011-08-05 11:09:58
543
原创 树状数组应用
一维树状数组常用的3个函数int lowbit(int x) //取x的最低位1,比如4,则返回4,如5,则返回1{ return x&(-x);}void update(int i, int val) //将第i个元素增加val{ //i的祖先都要增加val while(i <= n) { sum[i] += val; i += lowbit(i); //将i
2011-08-04 23:36:46
3043
原创 poj 2299 逆序数
poj 2299 求逆序数逆序数的定义:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列。如2431中,21,43,41,3
2011-08-04 22:06:49
2225
原创 hdu 1166 树状数组 & 线段树
//树状数组#include "stdafx.h"#include using namespace std;const int MAXN = 50010;int num[MAXN];int sum[MAXN];//sum[i]: lowbit为i的二进制表示中右边第
2011-07-31 11:24:27
551
原创 Bellman_ford或spfa 判断图是否存在负环
/*判断负环的两种方法:Spfa思想:如果存在一个点进入队列的次数超过N次,则存在负环。bellman_ford思想:对所有的边进行v-1 松弛即如果 dis[u]+map[u][v] < dis[v] 则 dis[v] = dis[u]+map[u][v] 若v-1次
2011-07-28 22:12:36
3484
原创 hdu 1358 KMP运用
题意:求前缀的循环周期。示例:abababab前4个字符,循环字串为ab,有2个循环周期 ab|ab前6个字符,循环字串为ab,有3个循环周期 ab|ab|ab前8个字符,循环字串为ab,有4个循环周期 ab|ab|ab|ab输出:4 26 38 4当i=6时,next[4] =
2011-07-19 12:14:45
855
原创 hdu 1711 KMP算法练习
#include using namespace std;int S[1000010];int T[10010];int n,m;//主串,模式串,返回在主串的第几个位置匹配int kmp(int *S, int *T){ int next[10010]; /
2011-07-18 17:27:51
497
原创 KMP算法中的next函数
KMP算法详解看 http://www.matrix67.com/blog/archives/115 next[i]表示当模式串T[i]与主串失配时,模式串的索引回溯到next[i],主串的索引不变 下面串的下标均从0开始 -1 i==0
2011-07-17 23:55:11
918
原创 USACO 2.1.1The Castle
// the castle.cpp : 定义控制台应用程序的入口点。///*ID: maiyuet1PROG: castleLANG: C++*///#include "stdafx.h"#include #include #include #include
2011-07-16 12:08:54
425
原创 USACO 2.1.5 Hamming Codes
// hamming.cpp : 定义控制台应用程序的入口点。///*ID: maiyuet1PROG: hammingLANG: C++*///#include "stdafx.h"//暴力.....#include #include using name
2011-07-16 12:03:16
364
原创 USACO 2.3.3 Zero Sum
// zerosum.cpp : 定义控制台应用程序的入口点。///*ID: maiyuet1PROG: zerosumLANG: C++*///#include "stdafx.h"#include #include using namespace std;
2011-07-16 12:01:48
527
原创 USACO 2.1.4Healthy Holsteins
// holstein.cpp : 定义控制台应用程序的入口点。///*ID: maiyuet1PROG: holsteinLANG: C++*///#include "stdafx.h"/* 直接DFS,N <= 15;每种只有2种情况,拿或不拿,2^15*/
2011-07-16 12:00:21
304
原创 USACO 2.1.3 Sorting A Three-Valued Sequence
//// sort3.cpp : 定义控制台应用程序的入口点。////*ID: maiyuet1PROG: sort3LANG: C++*///#include "stdafx.h"/*题意求排序所需的最少移动次数,可以先将输入的数字排序,然后得到不同的地方
2011-07-16 11:57:18
411
原创 USACO 1.4.1Packing Rectangles
// 123.cpp : 定义控制台应用程序的入口点。///*ID: maiyuet1PROG: packrecLANG: C++*///模拟示例中的6种情况//#include "stdafx.h"#include #include #include
2011-07-16 11:52:28
441
原创 USACO 2.3.1The Longest Prefix
//// prefix.cpp : 定义控制台应用程序的入口点。///*ID: maiyuet1PROG: prefixLANG: C++*///#include "stdafx.h"//一维DP可解//下面的用字典树+BFS的代码,挂在第6组数据上。至今未解.
2011-07-16 11:47:00
415
原创 USACO 2.2.4 Party Lamps
// Party Lamps.cpp : 定义控制台应用程序的入口点。///*ID: maiyuet1PROG: lampsLANG: C++*///#include "stdafx.h"//这道题的纠结程序不亚于之前那道rectanle深搜//按下按钮次数c若
2011-07-16 11:42:33
487
原创 USACO 1.5.4 checker
// checker.cpp : 定义控制台应用程序的入口点。////#include "stdafx.h"//参考Matrix67位运算讲稿,n皇后问题位运算版//n皇后,通过位运算解决n皇后问题,输出所有解的总数和前3组解的具体放置方法/*ID: maiyu
2011-07-16 11:37:49
469
原创 hdu 3829 二分图最大独立集
//Cat VS Dog.cpp : 定义控制台应用程序的入口点。///*题目描述:动物园有N只猫,M只狗,P个小孩。每个小孩都有自己喜欢的动物和讨厌的动物,如果他喜欢狗,那么就讨厌猫,如果他讨厌猫,那么他就喜欢狗。某个小孩能开心,当且仅当他喜欢的动物留在动物园和讨厌的动
2011-07-16 11:16:08
2680
原创 hdu 3836,tarjan算法的应用(有向图缩点)
// hdu Equivalent Sets.cpp : 定义控制台应用程序的入口点。///*题目描述:将题目中的集合转换为顶点,A集合是B集合的子集,转换为,即题目给我们一个有向图,问最少需要添加多少条边使之成为强连通图。解题思路:通过tarjan算法找出图中的所有强连
2011-07-16 00:00:28
3547
原创 hdu 3499 最短路变形
// hdu 3499.cpp : 定义控制台应用程序的入口点。/*题意描述:给定一个带权值的有向图,求给定2点之间的最短距离。但是你有一次机会将某条边的权值变为原来的一半。解题思路: 1,在正向图中求一次dijk,求起点到任何点的距离dis_start[i] 2,在反向图中求一次dijk, 求终点到任何点的距离dis_end[i] 3,枚举所有的边 ans = min{dis_start[i] + weight[i][j] + dis_end[j]} 题目数据很BT,所以要用到邻
2011-05-03 23:12:00
1054
原创 hdu 3605 二分图多重匹配
<br />//题目描述:世界末日即将到来,地球上有n个人想转移到m个外星球,但是不同的人适应于不同的星球(1个人可适应多个星球),每个外星球都有人数的限制,现在给你星球人数的上限。还有每个人不同的适应情况。问,能否安排所有的人都成功地转移到外星球上。<br />//解题思路:赤裸裸的2分图多重匹配(思想类似于匈牙利2分匹配,不知道该怎么分析时间复杂度。。。输入注意要用scanf)<br />//2分图多重匹配,可作为入门2分图多重匹配的题#include <iostream>using names
2011-05-02 16:43:00
1099
原创 hdu 1429 BFS+状态压缩
//有位运算#include #include using namespace std;//钥匙编号a,b...j 对应状态数中右数第0,1...9位 int hash[21][21][1100];int pow[11] = {1,2,4,8,16,32,64,128,256,512}; int op[4][2] = {1,0,-1,0,0,1,0,-1}; //方向向量 int n,m,t;char map[21][21];typedef struct
2011-05-02 14:49:00
574
原创 hdu 1704 传递闭包
<br />//题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1704<br />//题意描述:给你一些胜负关系,问最后有多少组人无法知道胜负关系。<br />//思路: 将已经有胜负关系的用一条有向边连在一起,即将题目转换为求任何图的传递闭包,若2个人之间没有胜负关系,则他们之间不存在边<br /> <br />#include <iostream>using namespace std;const int MAXN = 500+10;i
2011-04-29 16:36:00
795
原创 hdu 1181 floyd求有向图传递闭包
//floyd求传递闭包#include #include using namespace std;int map[200][200];void floyd(){ for(int k='a'; k { for(int i='a'; i { /* if(i == k) { continue; }*/ for(int j='a'; j { map[i][j] = map[i][j] || (map[i][k] && map[k][j]); } } }}int main(
2011-04-29 15:40:00
1868
原创 hdu 3631 顶点间的最短路径
<br />//有向图求2点间的最短路径,要求只能经过被标记的点<br />#include <iostream><br />using namespace std;<br />const int MAXN = 300+10;<br />const int INF = 0x3ffffff;<br />int dis[MAXN][MAXN];<br />int sign[MAXN];<br />int n,m,q;<br />//每次新加入一个点,更新顶点对间的最短路径(floyd)<br />void up
2011-04-29 15:04:00
820
1
原创 hdu 2159 二维费用完全背包
//题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2159//题意:中文题,不解释//2维费用背包问题//解题思路:题目要求升完级后还能保留的最大忍耐度,转换为求,总忍耐度 - 升完这级需要的最小忍耐度//f[i][u][v] 杀死前i种怪物达到经验值为u并且是v只怪物的最小忍耐度。//f[i][u][v] = min(f[i][u][v],f[i][u-jinyan[i]][v-1]+rennai[i])#include using namespace s
2011-04-29 01:43:00
603
原创 pku 1980 DFS
/*题目链接http://poj.org/problem?id=1980题意描述:输入p,q,a,n 给定一个分数p/q. 求满足 p/q = 1/a1 + 1/a2 + 1/a3 +...+ 1/ai 所有的组合情况。并且有2个限制条件,i解题思路:由于n代码*//*题目链接http://poj.org/problem?id=1980题意描述:输入p,q,a,n 给定一个分数p/q. 求满足 p/q = 1/a1 + 1/a2 + 1/a3 +...+ 1/ai 所有的组合情况。并且有2个限制条件
2011-04-23 15:08:00
668
原创 hdu 1045 DFS+回溯
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045题目描述:给你一个n x n的矩阵,若该点不为障碍,则可以放置大炮,大炮可向上下左右4个方向开炮,所以若同一行或同一列存在2门大炮并且他们之间没有障碍,则会出现互相攻击,当然我们不希望这种情况出现。现在问你最多能放置多少门大炮并且他们不能互相攻击。解题思路:对于每个点,若能放置大炮则能选择放或者不放两种情况,若不能放置大炮则就只有一种情况。由于题目的数据规模很小,n#include using name
2011-04-23 01:42:00
1312
原创 hdu 1258 DFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1258题目描述:给你一个数t作为最后等式的和,并给你一组数a[i](i例:t=4. a[]={4,3,2,2,1,1}输出 4,3+1,2+2,2+1+1解题思路:题目要求输出从大到小输出,所以可以先给所有的数进行降序排序。数据的规模很小,所以可以用暴力搜索。搜索过程中,为了避免重复输出,需要记录前一层搜索的起点,下一层递归搜索的起点不能与前一层记录的点一样...说不清楚,具体见代码#include #inc
2011-04-23 01:11:00
1347
原创 hdu 1074 DFS+状态压缩DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074题意描述:小m现在需要完成 n (n入所有的作业名,现在需要你输出完成作业的顺序,以使得被扣除的分数最少。 如果存在多种方案,则按字典序最小的输出。解题思路:完成同样的作业,如果安排的顺序不一样,被扣除的分数也就不一样,但是需要的时间是一样的。所以我们可以通过压缩状态(2进制映射成10进制)来进行最优解剪枝,题目的n作业的顺序,一种,先完成第1门,再完成第2门。另一种,先完成第2门,再完成第1门。搜索过程都
2011-04-22 16:43:00
1149
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人