自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (3)
  • 收藏
  • 关注

原创 运行时数据区

java 虚拟机定义了若干种程序运行期间会使用到的运行时数据区。 其中一些随着虚拟机启动而创建,随着虚拟机退出而销毁。 另一些是跟线程一一对应,随着线程开始和结束而创建和销毁。 1. PC寄存器:与线程相关,每一个虚拟机线程都有自己的PC寄存器2. java栈java虚拟机栈,与线程相关,每个线程都有自己私有的虚拟机栈,与线程同时创建。用于存储栈帧,存储局部变量,一些尚未算好的结果,用于方法的调用和

2017-09-29 19:21:22 173

原创 用数组模拟大数加法模板

void F(){ f[1][0]=1; f[2][0]=2; f[3][0]=4; f[4][0]=7; int t=0; // 核心代码: for(int i=5;i<maxn;i++){ t=0; for(int j=0;j<105;j++){ t=f[i-1][j]+f[i-2][

2017-09-28 20:06:08 445

原创 hdu 1297 Children’s Queue

主题思想: 首先推导出递推公式,F(n)=F(n-1)+F(n-2) +F(n-4)然后主要是用数组模拟大数加法,代码简洁,写起来比较快。数组模拟大数加法模板: void F(){ f[1][0]=1; f[2][0]=2; f[3][0]=4; f[4][0]=7; int t=0; for(int i=5;i<maxn;i++){

2017-09-28 20:04:43 250

原创 hdu 1293 The Number of Paths

主题思想: 数学题,递推公式推导,加大数加法, 大数加法,有两种思路: 一是,利用字符串模拟每一位,二是,利用int数组,用一个int表示多位数。 比如用一个int表示4位。代码如下:void F(){ memset(a,0,sizeof(a)); a[1][0]=3; a[2][0]=7; int t=0; for(int i=3;i<=1000;i++)

2017-09-28 16:13:28 378

原创 hdu 1292 下沙ACM夏令营

主题思想: 动态规划。可以理解为i个人分为j组,另dp[i][j] 表示i个人,分成j组, 那么i个人,可以由i-1个人组成j-1组,第i个人独立成组,也可以i-1个人组成j组,第i个人加到j组中的一个。 则状态转移方程:dp[i][j]=dp[i-1][j-1]+dp[i-1][j]*jAC代码:include includeincludeusing namespace std;const in

2017-09-28 11:49:30 260

原创 hdu 1290 切蛋糕

主题思想: 数学题。 这种题一般是有通项公式的,如果是平面,一般是 a*n^2+b*n+c ,如果是立体空间 ,一般是a*n^3+b*n^2+c*n+d。 可以采用待定系数法进行求解。由这道题很容易想到一个简单的题目。即n条线能把平面最多分为几块。f(n)=f(n-1)+ n;最后通项公式是 f(n)=(n+1)*n/2+1;如果是立体的。g(n)=g(n-1)+f(n-1) 递推得到

2017-09-28 10:47:57 334

原创 hdu 1288 Hat's Tea

主题思想: 贪心。思路如下: 如果总金额小于茶的价格,或者茶能被5角支付剩下来的零钱大于1角的个数(此时只能用1角支付),或者茶能被10角支付剩下来的钱大于5角和1角的总和,则不能支付。 能被支付的必然满足,零头能被满足。 接下来用1角支付, 如果1角的总和大于茶的价格,则能支付。1角不能完全支付,则,尽可能多的用1角,即除了用1角支付5角剩下的零头,如果剩下来1角的钱能替换5 角,就用5个

2017-09-27 22:05:17 240

原创 hdu 1286 找新朋友,欧拉函数

主题思想: 欧拉公式的使用。 欧拉公式是指求一个数n,从[1,n-1] 中与n互质的个数。欧拉函数Euler(n)= n*(1-1/p(1))(1-1/p(2)) …(1-1/p(n)) p(1),p(2),p(n) ,是n的质数因子。欧拉公式int Euler(int n){ int ans=n; for(int i=2;i*i<=n;i++){ if(n%i

2017-09-27 20:10:48 190

原创 hdu 1285 确定比赛名次

主题思想: 拓扑排序。 拓扑排序的方法:1. 根据顶点入度进行计算,首先选取入度为0的节点,然后,去掉入度为0的顶点以及它出发的所有边。直到所有找到所有顶点。2.还有一种dfs的方法,根据dfs完成的顺序,把先完成的节点加入栈,最后出栈就是拓扑排序序列,即拓扑排序序列与dfs先完成的节点顺序相反。对于本题,我采用第一种方法。本题应采用邻接表表示图,并且记录已经输入的边,如果重复,则不再增加入度。题

2017-09-27 16:25:16 198

原创 hdu 1284 钱币兑换

主题思想 : 这题有两种主流思路: 母函数方法,和动态规划方法。先说母函数方法,母函数方法,模拟多项式乘法,这里,有个技巧就是,利用数组下标表示多项式指数。 模拟 (1+x+x^2+x^3+x^4+…)(1+x^2+x^4+x^6+…)(1+x^3+x^6+x^9+…) 由于是n是有限制的,所以开辟n+1大小的数组,模拟乘法。int a[maxn]; int b[maxn]; f

2017-09-27 13:48:15 239

原创 hdu 1281 棋盘游戏

主题思想: 匈牙利算法,最小点覆盖=二分图最大匹配数, 求最大匹配。 但是怎么就能看出来是最大匹配数呢? 分析下思考过程,一行一列至多有一个棋子车, 抽象出来就是每一行对于多列只能匹配一列,只能有一个车,就是说,行坐标是一部分,列坐标是一部分, 分别把行,和列作为二分图的两部分。就能求出最多能放多少个车。对于重要点,采取遍历去除的方法,如果取消掉某个点,最大匹配少了,该点就是重要点。匈牙利算法模

2017-09-26 21:21:10 156

原创 hdu 1277 全文检索

主题思想: 大部分说是AC自动机模板题,自动机我还不会,看别人说可以用tries做,这个我会,主要是刚开始没想好思路。 是利用关键字做tries 树, 我一开始还想着把文本构建tries呢。主要用tries的Insert 和query 方法:struct Node{ int val; struct Node* next[R]; Node(){ val=

2017-09-25 23:14:48 179

原创 hdu 1280 top M

主题思想: 利用堆实现,最小队列,实现topM算法。堆用数组表示,下标从1开始,父节点为i那么两个son 下标分别是 2*i, 2*i+1 反过来孩子节点下标为k 父节点下标2*k。 堆排序主要有两个操作,一个是swim ,一个是sink 当新插入一个元素时需要swim操作, 删除根节点时需要sink操作。void exch(int i,int j){ int tmp=top[i]

2017-09-25 16:41:05 251

原创 hdu 1274 展开字符串

主题思想: 主要是利用两个栈,一个存放数字,一个存放字符串,。存放数字的栈需要把( 也放进去,用于分割需要合并的字符串。 比如 1a2b1(ab) 如果仅仅是把数字存进数字栈中, 遇到一个字符串需要数字栈出栈顶元素,进行扩展字符串,比如,1a,读到a时,需要把1出栈,如果不存放(, 读到1(ab) 时,读到a时就把1出栈了,正确是读到b)时,ab作为一个整体扩展。 另外还需要考虑,输入中省略

2017-09-23 23:15:10 250

原创 hdu 1273 漫步森林

主题思想: 这是一道数学规律题,那么怎么分析找出这个规律呢??分析思路如下,从一个点出发,再回到这个点需要消耗2条边,如果存在不同路径,每次路径不同,就从这个点的所有连接边中再找两条不同边,必定会消耗掉。一个点有(n-1)条边, 那么最多有(n-1)/2个不同的可能。因为每个顶点,都有n-1条边,所有肯定有(n-1)/2 个不同路径参考博客:http://blog.csdn.net/acmer_h

2017-09-23 11:19:25 270

原创 hdu 1272 小希的迷宫

主题思想: 判断连通分量,有没有环,是不是最小生成树。 判断连通分量可以用并查集来做,如果新来一条边,这条边的两个端点的根是同一个,那么加上这条边后,和根就会构成一个环,如果要输出环,可以采用dfs+ stack的方式把构成环的节点压入栈。 如果没有环,只有一个连通分量,边的个数+1 等于顶点的个数,那么就是最小生成树。AC代码:#include<iostream> #include<cstdi

2017-09-23 10:39:20 186

原创 hdu 1269

主题思想: 图论 ,判断一个图是否是强联通,以及求图的强联通分量。判断一个图是否是强联通的,有两种算法,一个是kosaraju 算法,和 tarjan 算法, kosaraju是一个需要建立逆图的算法,这里介绍tarjan算法 核心思想是依据DFS. 更新LOW[i] 。具体参考博客:http://blog.csdn.net/w571523631/article/details/779907

2017-09-22 16:53:35 296

原创 hdu 1394 最小逆序数

主题思想: 用线段树,或者树状数组求出给出序列的逆序数,利用线段树求逆序数的思路是: 线段0-n-1 表示给出的序列。 依次读入序列的值 ai ,查询线段树i之后已经读入的值,因为是按顺序读入序列的,如果读入ai查询,i之后的线段的值,如果不为0,表示在i之前没有比ai大的数,否则,则证明,读入ai时,在i之前,已经有比ai大的数,这些数与ai构成逆序对。 然后再更新线段树i节点 为1 表示已经

2017-09-21 17:46:32 196

原创 hdu 1754 I hate it

主题思想: 这道题是RMQ问题,通常RMQ可以用线段树和树状数组来做。由于树状数组记录的是区间和问题,这道题求的是最值问题,所以这道题不能用树状数组,是最简单的单点更新,区间查询问题。线段树版本, 首先RMQ ,Q (query) 的是什么呢? 一个区间的最大值问题,所以线段树节点存放最大值,因为只记录着一个值,用int数组就可以了。 线段树核心操作 ,建树,更新,查询,const int

2017-09-21 14:51:40 187

原创 转载notonlysuccess的线段树博客

介绍: 线段树和树状数组,都可以用来解决RMQ问题,树状数组实现起来较简单,简洁。但是能用树状数组解决的问题都可以用线段树做,而线段树能解决的问题,树状数组却未必能做。 http://blog.csdn.net/weizhuwyzc000/article/details/50407450

2017-09-21 14:19:57 268

原创 hdu 1264 counting the squares

主题思想: 这题本来应该是用线段树,求矩形的并面积的题。但是由于这道题,数据量小,就采用,标记遍历的思想做了。首先,把给出矩形包括的小方格标记为true,最后统计有多少个true的小方格。AC代码:#include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const

2017-09-20 11:17:45 335

原创 hdu 1263 水果

主题思想: 主要是熟练,c++中map的遍历方式。属于训练使用stl模板数据结构部分:#include <iostream> #include<cstdio> #include<cstring> #include<string> #include<map> using namespace std;int main() { map<string,map<string,int> > m;

2017-09-19 21:48:50 294

原创 hdu 1262 寻找素数

主题思想: 寻找素数。 给一个偶数,要求寻找最近的素数对,使这两个素数的和等于这个偶数。我的思路是,首先对这个偶数n,求其一半的值m=n/2。 如果m是一个素数,m就是所求。 令a=m,b=m; 如果a,b是偶数,则a=a-1;b=b+1;只有奇数才有可能是素数,如果a,b是奇数,则a=a-2;b=b+2才保证a,b是奇数, 再验证是否是素数。AC代码:#include <iostream>

2017-09-19 21:17:43 296

原创 hdu 1260 Tickets

主题思想: 动态规划。这题第一开始想到dp,后来又觉得不是dp,构建了图,按最短路径求,可是TLE, 还是觉得是dp, 这次想通了,dp其实是递归的形式,每次保存结果,避免递归的重复计算,就是dp。 如果要想找到dp,这要从第2个人开始分析,第一个人是一个特例。 核心状态转移方程。 dist[i]=min(dist[i-2]+d[i-2],dist[i-1]+a[i]) ,i=2,3,4,.

2017-09-19 09:11:00 299

原创 hdu 1253 胜利大逃亡

主题思想: 这是一道3维搜索题,因为求的是最小xx ,所以是bfs 搜索题。三维搜索模板:int dir[6][3]={ 1,0,0, -1,0,0, 0,1,0, 0,-1,0, 0 ,0,1, 0,0,-1 }; struct Node{ int x,y,z; int step=0; Node(){} Node(int xx,int yy,int zz){

2017-09-15 16:49:55 307

原创 Tries 模板

const int R=26;struct Node{int val=0; Node* next[R]; Node(){ val=0; //very import memset(next,NULL,sizeof(next)); } }; Node* root;int ans=0;void put(char key[]){Node *x=root; int d=0; cha

2017-09-14 23:13:20 253

原创 hdu 1251 统计难题

主题思想 : Tries , 在每个非空节点,记录经过它的字符串的个数。 核心方法是 Tries 的put ,get 和collect 方法。const int R=26;struct Node{ int val=0; Node* next[R]; Node(){ val=0; //very import memset

2017-09-14 23:12:22 145

原创 hdu 1250 大数

主题思想: 一看知道属于大数问题, 然后就写了字符串模拟大数加法,超时,后来又发现可以节省几个步骤,写了大数减法,又超时。 以后只要是大数问题,不再尝试 c++ ,直接用java写。这次又遇到一个用int模拟大数的新思路。用一个int位,来代替4位的字符串位,来模拟大数加法。#include<iostream> #include<cstdio> #include<cstring> #inclu

2017-09-14 22:02:26 301

原创 hdu 1247 HatWord ,Tries

主题思想: 字典树 Tries 另外 c++ string sbustr( int start,int len) if len=-1 ,then until the end of the string总结起来就是, c++ string substr 参数是起始位置,和长度java String substr() 参数是起始位置,和结束位置下标,不包括结束下标Tries

2017-09-13 22:29:51 184

原创 hdu 1245 saving james band

主题思想: 根据数据构造图,然后利用图算法,求最短路径,最短路采用SPFA算法。SPFA算法模板:queue<int> q; int start; q.push(start);while(!q.empty()){ int now=q.front(); q.pop(); // update all node 这里是重点,更新所有节点 for(int i=0;i<n

2017-09-11 19:49:26 168

原创 hdu 1244

主题思想: 动态规划dp[i][j] 表示前i个段,由前j个数组成。 那么对于第j个数,可以入选,前i段,也可以不入选 如果j组成了第i段,那么j-len[i] 组成i-1 段dp[i][j]=max(dp[i][j-1],dp[i-1][j-len[i]]+sum[j]-sum[j-len[i]]AC 代码:#include <iostream> #include<cstdio> #inc

2017-09-07 21:19:04 353

原创 hdu 1243

主题思想: 这是一个变形LCS,但是我却TLE了,代码和求LCS基本一样,只不过LCS是长度加1, 这里是加恐怖分子权重。TLE的根本原因是: 使用了memset,, memset对所有结果进行赋值,但是其实我们只需要初始化 dp[0][j] (j 取 1,–列的长度) 和 dp[i][0] (i 取 1,,行数) dp[0][0] m+n+1 个 而memset,是对m*

2017-09-07 15:09:50 326

原创 hdu 1242

主题思想: 这题是求最小xx题,所以可以用BFS做,这题还可以归结为求图求最短路径问题,所以这题可以用SPFA求最短路径做,但是由于我自己设计的数据结构问题,我的类似于SPFA思想,却不同于SPFA模板,主要是我取消了visited 方法,所以导致,效率会变慢。首先,能用BFS ,肯定也能dfs,由于dfs情况太多,所以可以用记忆化搜索做,但是我用记忆化搜索过程出现了错误,主要是,和传统的记忆化搜

2017-09-07 11:12:01 205

原创 SPFA算法

queue<int> q; int start; q.push(start);while(!q.empty()){ int now=q.front(); q.pop(); // update all node 这里是重点,更新所有节点 for(int i=0;i<n;i++){ if(dist[now]+g[now][i]<dist[i]){

2017-09-07 11:03:17 165

原创 hdu 1241

主题思想: 这题核心是Union Set ,但是需要自己以搜索的方式,构建哪些边是联通的信息, 搜索的时候,本来需要8个方向都要判断,但是由于从上往下,从左往右搜索,因此只需要对4个方向进行判断,避免了重复, AC代码:#include <iostream> #include<cstdio> #include<cstring> #include<string> using namespace s

2017-09-05 22:26:32 209

原创 hdu 1240 Asteroids!

主题思想: 最短xx ,首先应该想到BFS,因为一般的搜索题都是二维的。 这题是第一次三维的,主要是,三维方向变多了,从4个变成了6个,int dir[6][3]{ 1,0,0, -1,0,0, 0,1,0, 0,-1,0, 0,0,1, 0,0,-1 };AC 代码:#include <iostream> #include<cstdio> #include<string

2017-09-03 22:37:28 189

原创 hdu 1238 substring

主要是遍历搜索: 刚开始这题我被吓到了,我以为需要手动写个KMP或者,最大连续子序列算法呢,后来c++ stl 里面的 string:: find 就可以实现查找的子串的功能了。思路是,首先找到所有字符串中的最短字符串,然后获取这个字符串的所有可能字串,遍历这些字串,因为是求最大长度,所以可以优化为,从最长字串开始搜索,如果在所有字符串中都有该子串,或者该子串的反转,就满足题意。 AC代码:#in

2017-09-03 19:40:47 270

原创 字符串匹配算法,Boyer-Moore 算法

这是一个非常重要的算法,比KMP 实现起来更容易,且实际运行效率更高,既然学不会KMP ,那总得学会这个算法吧详细的Boyer-Moore算法,思想,参考下面这篇博客:http://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm.html

2017-09-03 15:52:43 384

原创 字符串匹配算法KMP

说实话,KMP 是非常常见的,经常被大家提起的,但是个人感觉非常麻烦的,一直不太理解的,或者一直不太会写的字符串匹配算法。 *此外,KMP 并不是最好的字符串匹配算法,有比KMP 更简单,更高效的算法,这里暂且不提。我发现一篇博客,我觉得写的很好,讲的很清楚,特此转载,本来都不想学KMP 了。下面是这篇博客链接: http://kb.cnblogs.com/page/176818/

2017-09-03 14:20:30 190

原创 hdu 1233 还是畅通工程

主题思想: 最小生成树SPT,prime算法, prime 算法核心代码, vector<int> spt; vector<int> g[maxn];int SPT(int start){ spt.clear(); spt.push_back(start); visited[start]=true; int ans=0; int next=0; wh

2017-09-02 16:48:52 228

学习vim 编辑器 第7版

学习vim 编辑器,最新版,vim学习必看。包含了vim的各种使用技巧。

2017-11-14

深入浅出iphone开发中文版

head first iphone programming 中文版

2016-09-26

网络水晶头接法

网络水晶头的接法,再也不用发愁水晶头不会接了

2014-07-08

空空如也

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

TA关注的人

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