自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 Codeforces Round #402 (Div. 2) C:Dishonest Sellers

Codeforces Round #402 (Div. 2) C:Dishonest Sellers #include #include #include #include #include #include using namespace std;#define MAXN 200010static int N,K,ans,A[MAXN],B[MAXN];int main

2017-02-26 20:00:50 324

原创 Codeforces Round #401 (Div. 2)C. Alyona and Spreadsheet

Codeforces Round #401 (Div. 2)C. Alyona and Spreadsheet看代码  一种新的思想 dp 以每行#includeusing namespace std;const int MAXN=100010;int n,m,a[MAXN],last[MAXN],h[MAXN],k;int main(){ scanf("%d%d"

2017-02-24 20:41:30 225

原创 hdu1281+坐标构图+二分匹配

hdu1281+坐标构图+二分匹配这道题主要就是构图思想 之前的A题也是一样的 但是没想明白为什么这样构图是正确的 虽然说现在也没真正想清楚 但是也能够进一步理解解题思路是 以x 和 y轴建立二分图 x和y分别代表两个集合 如果一个点可以放车 那么x,y连一条边因为是 坐标的垂直方向和水平方向不能有车 所以这个坐标x,y连一条边,这样就可以排除车相互攻击的可能性 代表可以放东西

2017-02-24 17:06:38 301

原创 poj1236 有线图的强连通分量 tarjan算法判断

poj1236 有线图的强连通分量 tarjan算法判断/*/*总结:这道题开始做的时候思路是正确的,但是我是把它当成无线图处理了但是这道题是有向图,有向图的连通判断是tarjan算法和kosaraju算法判断几个强连通分量无向图就是判断判断是否连通,一般有两种方法判断无向图1;并查集2;搜索,bfs,dfs; 这道题判断强连通分量,然后是缩点,将一个强连通分量变成一个点,那么就变

2017-02-17 18:08:54 401

原创 hdu 4009 小树形图

hdu 4009 小树形图这道题用到图论的一些思维方法 那就是增加超级源点 超级源点到其他所有点的权值是其他点打井的花费  这样的话 就很好表示哪一户打井 如果打井就选择相应边进行了做题时的错误:1;以为打井的深度是任意深度的   其实是固定的c 原文的误解让这道题增加了难度2;写代码时总是忘记变量的匹配了  函数返回值的匹配  还有就是n值忘记改  导致run time erro

2017-02-10 18:02:20 284

原创 次小生成树 poj1679

次小生成树 poj1679遇到一道需要思考的题,所以把他写下来,见代码注释#include#include#include//什么是最小生成树?简单说就是第二小的树,这个第二小不一定是总权值第二小,也可能和MST一样的#include//题目:判断最小生成树是否唯一 #include //开始的时候 用的另一种枚举但是有个细节没处理掉 就错了 #include//最小生成树 运用

2017-02-04 22:42:53 232

原创 Beaver's Calculator coderforces 70A1 蓝桥杯

Beaver's Calculator coderforces 70A1 这道题贪心 思路简单 但是方法对于我来说比较巧了 题解看源码#include#includeusing namespace std;struct type{long x,y,z;}p[300000];bool cmp(type x,type y){ if (x.x==y.x) ret

2017-02-02 21:02:50 970

原创 floyd 算法 带输出路劲

//floyd 算法 带输出路劲#include#include#define inf 0xFFFFFFFusing namespace std;const int maxn=100005;int n,dp[maxn][maxn],path[maxn][maxn];//floyd算法利用的是动态规划的思想。//也是可以求解矩阵的最值 void init()//求解最小或者最短时的初

2017-01-22 18:41:39 630

原创 kmp

kmp的原理还好理解 但是代码比较难理解#include#includeusing namespace std;int next[105];void getnext(char *s,int lens)//O(m+n){ int j=0;next[0]=0; for(int i=1;i<lens;i++) { while(j&&s[i]!=s[j])j=next[j-1]

2016-12-27 00:03:58 208

原创 记忆化搜索 区间dp uva629

记忆化搜索 区间dp uva629这题一看就知道是区间dp 状态定义很简单 但是在写代码的时候 有个地方一直错 错到我吐血 下面代码中有写d(x,y,k,h)表示x行到y行 k列到h列的最少数 也就是子矩形的宽度和高度 d(x,y,k,h)=min(d(x,i,k,h)+d(i,y,k,h)+h-k)  列的枚举也是如此#include #include using n

2016-12-04 20:59:35 308

原创 记忆化搜索 逆向dp uva10118

记忆化搜索 逆向dp uva10118        这道题开始做的时候很容易 把状态定义成5维 d(i,j,k,h,g) 前面4个变量表示4堆糖果的现在在哪个位置 而后一个g则表示篮子里有几颗糖果 后面想了一下 我用递推的话那么我怎么推出每个状态后面的那个g 就是比较难转移 好像不行 因为之前很少用记忆话搜索 所以没有想到这个        原来记忆话搜索有这样的好处!记忆话搜索

2016-12-04 11:18:10 281

转载 STL中map用法详解

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有

2016-11-27 12:35:41 200

原创 石子合并 帮果实 动态规划解法

#include #include #include using namespace std;const int INF = 1 << 30;const int N = 205;int dp[N][N];int sum[N];int a[N];int getMinval(int a[],int n)//dp[i][j]表示的是第i到第j堆合并的最小花费 { for(i

2016-11-23 15:31:30 429

原创 poj1733 离散化 带权并查集的思考

poj1733解析 离散化  带权并查集的思考 题意是给你一个区间和区间1的个数是偶数还是奇数 然后判断第一个错提问的   第一眼看到这题感觉是线段树 思考一下线段树的做法 线段树维护区间信息 维护一个区间是奇数还是偶数 线段树一个节点代表一个区间 但是一个区间并不代表一个节点 要多个节点存储一个信息 多个交叉区间维护的话 就乱掉了 而且一般线段树题是多次询问 所以线段树不行,这个题就是维护区

2016-11-22 20:51:07 308

原创 第七届 蓝桥杯 5题

第七届 蓝桥杯 5题 对这道题的理解 #include #define N 6#define M 5#define BUF 1024void f(int a[], int k, int m, char b[])//m是还剩下派的人 { int i,j; if(k==N){ b[M] = 0; if(m==0) printf("%s\n",b); r

2016-11-15 21:18:11 322

原创 分析问题

分析问题最近在做校内的题 一道简单的搜索题 我居然卡了很久 后面问了下 听了下思路我才焕然大悟 开始思考了一天 一直按题目所给的条件去思考 按照题目条件的话就是去暴力搜索 现在想下很蠢啊  是先搜所有的可能 在判断 一边判断一边搜特别麻烦 对于我来说写不出来 其实开始想的时候就没有往先搜后判 因为怕这样的思路复杂度太大 效率低 一般大一点的赛 不会出这种题 所以就没有往这边想了 一边判一边搜复

2016-11-15 20:52:11 268

原创 快速幂取模

快速幂取模 刚好过来再来理解下 原理二分 #include#includeusing namespace std;int pew(int a,int n,int m){ if(n==0) return 1; int x=pew(a,n/2,m);//递归 二分 a^b%m=(a^2%m)^b/2 long long ans=(x*x)%m; if(n%2)//如果

2016-11-14 22:23:47 173

原创 带权并查集 hdu3038

并查集 hdu3038 集合的应用 个人感觉有点难想 开始看到的时候还以为是线段树 之后会想到并查集 想了1个钟头 出了一点思路就是维护集合中的元素到根节点的距离 但是开始的时候没有考虑到左端点可以减一 所以没有算出怎么判断区间集合的冲突(也就是判断错误信息 比如exemple 1~3和4~6 这是可以合并一个区间的) 后面看了下 就出来了 还有就是输入要输入文件的EOF才能退出  一

2016-11-03 13:23:50 406

原创 poj2236 并查集第一题 思路分析

并查集第一题 思路分析 poj2236 开始训练并查集 这是做并查集第一题 所以做一个思路分析 有助于自己对并查集的理解题意就不解释了问题一 判断各个节点之间是否可达?很明显 这里可以用dfs 或者 并查集 进行判断 这里用并查集比较快 因为这里并不用用到两点之间的路劲(由于比较慢,所以不用路劲来进行解决)或者其他一些信息一开始做的时候 因为是先进行各个点之间用并查集单独进

2016-11-02 16:53:28 311

原创 hdu4614 Vases and Flowers 二分

hdu4614 Vases and Flowers 二分这道题用数据结构为优化时间效率 用二分来分别找出左边界答案 和右边界答案 这是属于线段树数据结构与其他算法的结合使用 开始做的时候 还死死的在线段树上做文章。。。。问题是 在以A为起点的区间 第一个可以插花的 和最后一个可以插花的地方 按照正常思路的话可以想到二分 可是与线段树扯上了 就只能想到在线段树上处理 看来这种结合思想

2016-10-29 21:10:40 252

原创 hdu3974 线段树 编号的处理 dfs 加 lazy思想

hdu3974 线段树 编号的处理 dfs这道题想了大概一天 一直没想出来怎么对节点编号 后面百度了 看到dfs 瞬间开朗 利用dfs的时间戳 对节点编号 这样保证了 每个父节点的子节点 都在父节点所代表的区间内这里 用了以点保存区间的方式 开始的时候没有用lazy思想 直接用的setv[x]存储set的点 然后一直错后面想通了 如果我那样做的话 有可能之前set 的点

2016-10-29 13:27:31 227

原创 线段树处理 poj2892 hdu1540

线段树处理 poj2892 hdu1540这道题想了很久 没有想出来思路 后面上网找了题解 利用区间左端点连续 和右端点连续 处理了区间的连续sum数组存储连续村庄个数,lsum存储区间内从左起连续个数,rsum存储区间内从右起连续个数#include #include #include #include using namespace std ;#define INF

2016-10-26 21:16:10 208

原创 poj2528 线段数组 离散化

poj2528 线段数组 离散化#include #include #include using namespace std;#define lson l , m , rt << 1#define rson m + 1 , r , rt << 1 | 1const int maxn = 11111;bool hash[maxn];int li[maxn] , ri[maxn];

2016-10-25 22:30:55 649

原创 线段树总结 与 模板

线段树总结 与 模板单节点更新的 hdu1166 敌兵布阵 #include#include#include#includeusing namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn=100005;int sum[maxn<<2];void PushUp(in

2016-10-24 22:50:54 186

转载 prim算法 伪代码

点击打开链接Prim算法1.概览普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美

2016-10-24 21:15:32 8373 2

原创 最短路 dijkstra算法 poj2387 bellman_ford spfa

最短路 dijkstra算法 poj2387就是一个模板题,,,,,,,,,,,啊? 模板题 这个还要套模板?     一脸门鼻   直接上代码 #include #include #include #include using namespace std;#define inf (0x7f7f7f7f)const int maxn=100005;struct

2016-10-24 18:26:13 444

原创 双向广搜 代码框架

//双向广搜代码框架struct State { }; //状态queueque[2];bool vis[2];bool flag;void bfs(int d) { int size=que[d].size(); while(size--) { //普通单广转移新状态v if(vis[d][v]) continue; if

2016-10-23 20:26:50 593

原创 搜索进阶 hdu2181 回溯

搜索进阶 hdu2181最近在训练搜索题 简单的搜索题 已经基本大概的掌握了 现在做搜索进阶  hdu2181 做这道题 一眼思路就是广搜  考虑过迭代加深搜索或者dfs  如果他不要求全部输出 则这个就可以用 但是不是这个题还要求每个城市经过一次回到原点前面是废话 只是记录自己的思路而已我他妈在干嘛 就是回溯啊  卧槽这么简单的题都想错  在想什么啊  现在考

2016-10-19 16:56:03 265

转载 康托展开及其逆运算 详解

康托展开及其逆运算 详解详细看这里  点击打开链接康托展开是什么?定义:X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0!ai为整数,并且0简单点说就是,判断这个数在其各个数字全排列中从小到大排第几位。比如 132,在1、2、3的全排列中排第2位。康托展开有啥用呢?

2016-10-18 17:15:11 385

原创 poj3984 输出路径

poj3984 输出路径 第一次做输出路径的搜索题  这道题没有想到一个好办法  手写队列 然后记录前一个在队列中的位置 居然没有想到这个办法#include#include#define N 5using namespace std;struct note{ int x,y,pre; //存放坐标,前一个节点在队列中的位置} que[100];in

2016-10-15 17:49:13 252

原创 子集生成的三种方法

子集生成的三种方法最近遇到一个子集生成的题  没有很快的写出来  所以在把之前的过的子集生成方法在复习一边 第一种  增量构造法 在lrj紫书中  这是放到第一个讲解的 。。。。。。顾名思义 增量构造法 就是按照递增顺序就行构造子集 防止子集的重复 如 集合{1,2} 就不会输出{1,2} 和{2,1}这样重复的子集了 在解答书中生成 2^n方个子集 直接看

2016-10-15 11:19:30 5249

原创 poj3278 bfs

poj3278 bfs 这道题是很经典的bfs题 比较简单 开始想的时候 思路并没有很清晰 就开始敲代码 导致后面速度放慢 出错调试也慢 没有很快做出来 看来bfs还是不是很熟练#include #include #include #includeconst int INF = 0x3f3f3f3f; using namespace std;int maxn=100

2016-10-12 15:06:09 228

转载 集合的二进制表示

一些不大的数的集合,可以用二进制的形式来表示,注意这里的集合没有重复元素。集合的存储方法是用一串二进制的数存,第i位表示i这个数是否在集合中。设集合中最大的数不超过(1集合的运算因为是二进制表示,A|B、A&B、A^B、分别对应集合的并,交和对称差。子集 元素的输出从1到n枚举,如果在s中就输出,代码: void print_element(int n,int

2016-10-10 21:52:10 1328

原创 HDU 3018 Ant Trip 欧拉路 并查集

HDU 3018 Ant Trip 欧拉路 并查集 开始的时候没有看清题  以为是每个联通图判断欧拉路就行了  #include #include #include #include #include #include using namespace std;//hdu3018 对于联通的图判断奇数度数的个数 如果==0 就+1 就行了 否者 加奇数个数 #defi

2016-10-09 18:53:12 248

原创 Fleury算法求欧拉路径

Fleury算法求欧拉路径列出一些有关欧拉的题混合图欧拉回路 poj1637,zju1992,hdu34721HDU 3018 Ant Trip2POJ 1041 John's trip3 POJ 1386 Play on Words4 POJ 2230 Watch Cow5 POJ 2513 Colored Sticks6 POJ 23

2016-10-09 16:44:37 1968

原创 hdu1878欧拉回路 并查集学习 欧拉路学习

hdu1878欧拉回路 并查集学习 欧拉路学习 本来是学习欧拉路的  但在做题的时候发现自己对并查集掌握的不是很好 现在用这道题来写下自己对并查集,和欧拉路的一些思路首先以hdu1878 为列子写下这道题是纯的欧拉回路 直接写就是了 首先介绍下欧拉路的一些定义与性质       以下来自于这里欧拉通路 欧拉回路的区别 及其判定在做一些图类时经常要用到欧拉

2016-10-09 15:07:42 400

原创 01背包 第k优解

求次优解、第K 优解#include #include #include using namespace std;struct Node{ int price; int val;} node[1005];int main(){ int t; scanf("%d",&t); while(t--) { int n,

2016-10-07 20:13:00 327

原创 01背包 完全背包 多重背包 实现

01背包 完全背包 多重背包 实现 01背包//O(NV)f[0][0 ~ V] = 0;for(int i = 1; i <= n; ++i) for(int j = 0; j <= V; ++j) if(j < w[i]) f[i][j] = f[i - 1][j]; else f[i][j] = max(f[i - 1][j], f[i -

2016-10-06 21:23:34 262

原创 poj 2059 龟兔赛跑 DP

poj 2059 龟兔赛跑 DP 简单dp 思路很简单  一开始想的时候就想出了 以f[i]为最后一个站到达时间最短   确定了这种思路是正确的 然后写出了转移方程  f[i]=f[i-1]+min(要加油的时间,不加油的时间)  这里前面的c不归0 但是  但是  但是  我没写出代码来  这种转移方程代码好难写啊  后面百度题解 发现转移方程不是我这么写的  f[i]=min(f[j]

2016-10-06 17:59:57 292

转载 poj 1050 To the Max

poj 1050 To the Max这道题用到的是最大连续和 扩展到二维  开始时没想到是最大连续和 #include#includeint a[101][101],n,temp[101];int solve()//最大子序列和函数{ int i,sum=0,max=0; for(i=0;i<n;i++) { sum+=temp[i];

2016-10-06 13:10:27 185

空空如也

空空如也

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

TA关注的人

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