自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 206

原创 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 167

原创 hdu 1241

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

2017-09-05 22:26:32 210

原创 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 191

原创 hdu 1238 substring

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

2017-09-03 19:40:47 271

原创 字符串匹配算法,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 229

原创 hdu 1232 畅通工程

主题思想: union setunion set 核心代码: //init for(int i=1;i<=n;i++){ a[i]=i; h[i]=1; }int Find(int p){ if(a[p]==p) return p; a[p]=Find(a[p]);}void UN(int p,int

2017-09-02 16:00:21 202

原创 hdu 1231

主题思想:最大连续子序列,最大连续子序列是和最大的连续子序列, 这是一个经典的dp问题。 dp[i] 表示以i结尾的连续子序列的和 对于第i个数字,或者选择加入前面的序列,此时dp[i]=dp[i-1]+a[i],或者本身作为一个单独的序列,此时dp[i]=a[i]。dp[i]=max(a[i],dp[i-1]+a[i])即,如果dp[i-1]+a[i]>a[i] 则选择a[i]加入以前的序列

2017-09-02 15:58:10 322

原创 hdu 1227 Fast Food

主题思想: 动态规划首先 对于一组升序的数,选择仓库在中位数的位置能是距离最短,这种思路以前遇到过。动态规划转移方程 : 就是这个不好想啊。 首先题目要求的是距离。 那么就用dp表示距离,因为好多题都是这样。 另外dp[i][j] 是一般动态规划的形式,且一般下标从1 开始,那么我们这里要想明白dp[i][j] 表示什么意思。 令dp[i][j] 表示前j个商店中有i个仓库时,距离的和

2017-08-31 22:41:47 212

原创 hdu 1226

主题思想 : 此題是BFS, 题目要求,是如果有多个解,输出最小的,所以,需要对m进行排序,去重,从小到大进行BFS,这样能保证最小,此外,还需要对0进行特殊处理。 最重要的一点是,为了避免MLE(memory limited exceed) ,需要利用秦九韶算法,进行余数判重。一个n表示成((((a0*c)+a1)*c+a2)*c) %n== (a0*c+a1)%n*c+a2)%nAC

2017-08-31 22:01:58 429

原创 python-igraph 安装过程

利用 sudo pip install python-igraph 报错,说是C core of igraph 没有安装。解决办法是:sudo apt-get install -y libigraph0-dev然后sudo pip install python-igraph

2017-08-30 16:05:55 2424 3

原创 hdu 1225

主题思想: 这道题不难,利用map统计下就可以了,但是老是出错。 但是错了好多次,背后的原因值得记录。 原因在于: 我利用c++ string 来组织队名,并利用scanf(“%s”) 进行输入, 错就在这里。string 类型不能用scanf(“%s”) 输入, scanf(“%s”) 属于c的部分,只能输入,char型数组, 而string 是c++的stl, 不同于char型

2017-08-29 21:45:51 568

原创 hdu 1224

主题思想: 我用的是记忆化搜索,网上其他人用的是求最长路径。 记忆化搜索也不难,主要是,开数组,记录结果。 ;另外,这题在输出路径上花了时间, 输出超时OLE,最后解决办法是,把一些设置为最小值的数,设置的尽可能小。要注意 dijkstra不能求最长路径, 单源最短路径SPFA算法,可以处理负权边。实现起来还算简单。SPFA算法代码:queue<int> q;int start;q.push(

2017-08-27 22:11:34 207

原创 hdu 1222

主题思想: 数论 线性同余参考博客: http://blog.csdn.net/y11201/article/details/8600337AC 代码:include includeusing namespace std;int gcd(int m,int n){if(n==0){ return m;}int ans=gcd(n,m%n);return ans;}int main

2017-08-27 16:59:22 279

原创 hdu 1217 arbitrage

主题思想 : arbitrage 套利问题,可以转化为求最长路径问题,首先把所有节点间的利率初始化为0,然后求出本身到本身节点最大路径值。 如果是求指定两点的套利问题,可以用dijkstra,针对本题,是求的任意货币间所以用 floyd 求任意两点之间最短路径。floyd 算法代码模板: 主要是初始化,和三层循环//floyd init be to 0;void inital()

2017-08-27 15:22:07 229

原创 hdu 1216

主题思想: 简单模拟,打表先执行一遍,算出第3000个数的大小,然后,以第3000个数,为上限,申请数组空间,和执行初始化,最后AC#include <iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;const int INF=34000;const int maxn=3005;int

2017-08-26 22:13:48 223

原创 hdu 1215 七夕节

主题思想 ,求因子和,打表,求因子,还是需要点技巧的。求 maxn 以内数的因子和 代码: int m=maxn/2; memset(a,0,sizeof(a)); for(int i=1;i<=m;i++){ // j must can divide by i j%i is 0 for(int j=2*i;j<maxn;j+=i){

2017-08-26 18:42:46 189

原创 hdu 1124 圆桌会议

主题思想: 数学题, 给一个串数字组成一个环,12345…n 经过有限次相邻作为的对换, 变成 1,n,n-1,n-2,…2 如果是一个直线,不是一个环,根据直线长度n 需要的次数为n-1+n-2+n-3+…+1. 为 n*(n-1)/2 把一个环尽可能分成长度相等的两段, 分别计算两段直线的次数,和就是最小的操作。 参考博客: http://blog.csdn.net/lulipe

2017-08-26 17:51:21 272

原创 hdu 1213 How Many Tables

主题思想 : union set 找联通分量。 union set 代码:初始化: //init for(int i=1;i<=n;i++){ a[i]=i; b[i]=1; }int Find(int i){ if(a[i]==i){ return a[i]; } a[i

2017-08-26 16:40:07 218

原创 hdu 1212

主题思想: 秦九韶算法,同余定理。(a+b)mod n= a mod n+ b mod n (a*c) mod n= amodn *c mod n对于字符串,12345789 .. 转化为数字, 1*10^(n-1)+2*10^(n-2) 等于 (((1*10)+2)*10+3) …int num=0;for(int i=0;i<s.length();i++){ num=n

2017-08-26 13:21:54 243

原创 hdu 1211 RSA

主题思想: 数学题, 扩展欧几里得算,就线性同余方程。d=gcd(a,b)可以得到, d=ax+by ax+by=gcd(a,b) 依据扩展欧几里得可以求出系数,x,y ,注意,x,y可能小于0,a*dmod b=gcd(a,b)=1 特别的如果gcd(a,b) 等于1,则 是,a模b的乘法逆元。 参考博客: http://www.tuicool.com/articles/mINrQn

2017-08-26 12:58:31 241

原创 hdu 1210 洗牌

主题思想: 找规律跟踪第一张牌的位置,如果第一张牌回到了起点,则整体到了初始顺序。 对于第i张牌 if(i>n) 找规律发现,n+1,n+2,n+3其位置为1,3,5, =2*(i-n)-1 else i=2*iAC代码#include <iostream>#include<cstdio>#include<cstring>#include<queue>using name

2017-08-26 11:01:30 220

原创 hdu 1208

记忆化搜索 : 记忆化搜索的方式表现为 dfs+dp 记录已经搜索过的结果,如果搜索过,直接返回结果,否则才搜索。搜索类的题,好久没写,具体细节有些忘记了, dfs中如果需要回溯,则dfs调用后面再重新把走过的路标记为false。 比如常见的四个方向搜索for(int i=0;i<4;i++){ int xx=x+dir[i][0]; int yy=y+dir[i][1];

2017-08-25 21:10:12 257

原创 hdu 1205 吃糖果

主题思想 : 组合数学参考博客: blog.csdn.net/qinmusiyan/article/details/8104448 如果最多种类糖果的个数 为maxn,则maxn 个糖果至少需要maxn-1个挡板,也就是其他种类的糖果。 如果 sum-maxn#include <iostream>#include<cstdio>using namespace std;int main(

2017-08-24 20:43:12 164

原创 hdu 1203

经典动态规划 : 是一个背包问题。 如何选择使机会最大。 这是一个经典问题。 需要在重头考虑一下。 01背包 完全背包等思考过程。

2017-08-23 21:39:05 264

原创 hdu 1202

主题思想 坑主要在于,输入的学分可能是0 ,如果所有的学分都是0,即学分和为0的话,则认为是没有GPA 输出-1 AC代码:#include <iostream>#include<cstdio>using namespace std;double getGPA(double score){ if(score>=90) return 4.0; else if(score>=80)

2017-08-23 21:08:38 219

原创 hdu 1201 18岁生日

这是一个具有常识性的数学问题主要考虑,出生年份是在3月前,还是在3月及3月以后  如果他的生日在1、2月,那么就以当前年为起始年份,如果今年是闰年就要加一了;  如果他的生日在3月及以后,当前年是不是闰年没有影响,下一年作为起始年份考虑。 参考博客:http://www.cnblogs.com/ACDoge/p/6133186.htmlAC代码:#include <iostream>#inclu

2017-08-23 20:25:34 195

原创 hdu 1198

主题思想 : 这个题目就是求有多少个联通分量。用union Find结构很容易做到union find 核心代码,带优化版本int a[maxn];int cnt[maxn]; // 优化使用的,用来计数,一个根下有多少个节点。// initfor(int i=0;i<maxn;i++){ a[i]=i; cnt[i]=1;}int find(int v){ if(

2017-08-20 20:58:22 234

原创 hdu 1196 lowest bit

主题思想 :求lowestbit ,这是树桩数组里面的基础函数。 思路就是求一个数的二进制表示中,从右向左数,从0开始计数,第一次遇到1时,1所处第k位, 2^k的值。 或者说,从右向左数,遇到1为止,0的个数为k,2^k 或者说,从右往左数,遇到1为止,截断 这个二进制字符串所表示的整数。 比如 6 二进制为 110。 那么k为 1, 2^1 =2 或者10这个二进制字符串所表示的

2017-08-20 16:00:08 200

原创 hdu 1195 open the lock

主题思想 : 首先读题,求最小值,一旦出现求什么最小路径,最小值之类的,考虑BFS。 再看题目,经过某种变化,可以理解为经过某种状态,经过某种变化到达另一种状态,最后到达最终状态,最小步骤数,因此是一道BFS题。 此外,由于要标记已经访问过的节点数,visited,而题目又是一个字符串形式的四位数,因此把字符串对应的数字作为状态的唯一标志,来标记是否访问过。AC代码:#include<iostr

2017-08-20 15:39:18 210

原创 hdu 1181

主题思想 BFS, 因为DFS时报stack溢出,所以改用BFS,就好了 注意清空初始条件。AC代码#include <iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<queue>using namespace std;const int maxn=27;vector

2017-08-19 22:06:54 249

原创 hdu 1180

主题思想 : BFS ,这里有个注意的情况是除了上下左右可以走,也可以不走即可以停留,所以需要把地图上可以停留的点,单独在push进队列。 再一个注意的点就是,当是楼梯时,是根据刚到达的时间,进行变向的,也就是说,到达楼梯需要爬的时间,正好是上一步结束的时间。AC代码:#include <iostream>#include<cstdio>#include<queue>#include<str

2017-08-19 20:47:06 233

原创 hdu 1179

二分图最大匹配AC 代码#include <iostream>#include<cstdio>#include<vector>#include<cstring>using namespace std;const int maxn=105;bool visited[maxn];int matched[maxn];vector<int> wizard[maxn]; int n,m;bool d

2017-08-17 22:31:18 184

原创 hdu 1178

此題有纪念意义:如果两个int数很大,结果需要放到double型里面, 那么第一步请先乘以 1.0,转化成double型否则可能中间结果溢出,导致得不到正确答案 比如 int n;// n可能很大,double sum=0;sum=n*(n+1)*(n+2)/6.0;如果我们不在第一步乘以1.0,那么n*(n+1) 可能就已经溢出,结果自然是错误的,所以正确的写法是。sum=1.0*n*

2017-08-17 21:56:30 269

原创 java classpath

java project 中,有一些配置文件需要放在正确的地方,或者说,找一些文件时需要提供正确的路径。如果是普通的java project ,那么classpath 根目录就是 src如果是maven 项目,则路径是src/main/java 或者是src/main/resources

2017-08-17 17:56:44 171

原创 spring bean 声明学习

(1) 通过注解的方式 自动装配 @Component和config 类 启用 @Configuration 和@ComponentScan(basePackageClasses={a.class,b.class})(2) java config 不启用@ ComponentScan 只用@Configuration 结合@Bean(name=”xx”) 显式声明

2017-08-17 15:26:42 148

原创 hdu 1176

动态规划状态转移方程: 有三种状态,可以保持不动 ,也可以在下一秒时间走一步:向左,向右,特殊的 如果走到两端,则减少了一种情况。 由于申请的数组大。 走到最右端,再走,默认值是0, 所以可以一并处理。但是走到最左端,如果再向左走,下标变成-1 ,会出界。状态转移方程: dp[x][t] 表示t时间在x位置if(x==0) dp[x][t]+=max(dp[x+1][t+1],dp[x][t+

2017-08-16 22:26:27 186

学习vim 编辑器 第7版

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

2017-11-14

深入浅出iphone开发中文版

head first iphone programming 中文版

2016-09-26

网络水晶头接法

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

2014-07-08

空空如也

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

TA关注的人

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