自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(21)
  • 收藏
  • 关注

原创 HDU 3355 BFS

给定一条由一个个小方块组成的直线小路,有一只青蛙停在其中的一块小方块上,小方块分黑白两种,分别用字母B和W表示。青蛙停的位置则由字母F表示。按一定规则操作后,使得在黑方块中没有白方块存在。规则如下:青蛙共有4种选择,假设还有路的话,可以选择前进一步(即F?变成?F,其中?代表W或B,下同),或后退一步(?F变成F?),或前进两步(F?B变成W?F),或后退两步(W?F变成F?B)。

2015-03-29 15:39:45 617

原创 HDU 5195 线段树

官方题解:因为我们要求最后的拓扑序列字典序最大,所以一定要贪心地将标号越大的点越早入队。我们定义点i的入度为di。假设当前还能删去k条边,那么我们一定会把当前还没入队的di≤k的最大的i找出来,把它的di条入边都删掉,然后加入拓扑序列。可以证明,这一定是最优的。具体实现可以用线段树维护每个位置的di,在线段树上二分可以找到当前还没入队的di≤k的最大的i。于是时间复杂度就是O((n+m)lo

2015-03-29 12:01:24 985

原创 HDU 3502 BFS+状压DP

给出N*M矩阵x-1:不可走x=0:可走x>0::可走,且获得X能量从(0,0)点走到(n-1,m-1)点,每走一步需要花费一点能量,问能走到出口的最大剩余能量hint:特判起点是否有能量,如果没有直接 loss走到终点是可以选择先不出去,而去拿其他能量BFS出每个点包括终点的最短路,然后状压DP即可#include "stdio.h"#include

2015-03-27 17:01:10 583

原创 HDU 3564 线段树+DP

给出1~n的插入顺序,要求每次插入之后的LIS对于样例: 0:1插入到当前第0个位置后  10:2插入到当前第0个位置后   2 12:3插入到当前第2个位置后   2  1  3线段树处理空格填数问题,然后做LIS难点主要是如何处理LIS,因为每次填入的数字都是递增的,所以1——>n循环下去一定是递增的。mark记录每个数字的位置,因为数值递增,所以在保证LI

2015-03-25 17:02:35 578

原创 HDU 3607 线段树+离散化+DP

N个连续的盒子,每个盒子有高度h和价值v,选择任意一点进入,且从任意一点出来,进入后只能从左向右走,且每次走到的盒子高度必须更高,可以跳过低的盒子状态转移方程:dp[i]=max(dp[j])+v[i], (0h[j])用线段树优化,寻找  j#include "stdio.h"#include "string.h"#include "queue"#inc

2015-03-24 20:29:27 649

原创 FZU 2186 BFS+状压最短路

一开始看宝藏只有10个,100*100的矩阵,果断写了状压BFS,然后果断超时。。正解:先不考虑财宝,先做BFS算出,每个财宝之间的最短路(包括起点),然后状压最短路处理即可。注意三中情况:起点为负数,不存在财宝,存在一个财宝且财宝在原点。#include "stdio.h"#include "string.h"#include "algorithm"#inc

2015-03-22 17:51:36 806 2

原创 FZU 2188 BFS

最多只有200个羊,200狼,所以最多只有200*200种状态再加上题上的限制条件,不管在任何地方,羊的个数不能少于狼,除非羊为0,可以剪枝掉大量状态所以对所有情况进行BFS即可要注意一些判定条件1:不管在左岸还是右岸或船上,羊的个数不能少于狼,除非羊为02:起始时,若狼的个数大于羊,则无解(注意数据存在没有羊只有狼的情况)3:在移动中直接判断状态是否合法,能提供大量剪枝

2015-03-22 17:08:21 528

原创 FZU 2187 扫描线

和HDU 1255差不多这次是求只被覆盖一次的矩形面积和修改callen函数即可data[k].len表示被覆盖的纵长度data[k].key表示被只被覆盖一次的纵长度#include "stdio.h"#include "string.h"#include "stdlib.h"#include "math.h"#include "iostream"#incl

2015-03-22 16:57:44 596

原创 HDU 1255 扫描线

扫描线处理矩形覆盖过至少两次的区域的面积.把callen函数的修改一下即可data[k].len表示被覆盖的长度data[k].sum表示被覆盖两次以上的长度#include "stdio.h"#include "string.h"#include "algorithm"#include "math.h"using namespace std;struct Ma

2015-03-22 16:35:54 562

原创 POJ 1661 DP

中问题不再解释dp[i][0]表示下落到第i个平台的最左端需要的最少时间dp[i][1]表示下落到第i个平台的最右端需要的最少时间把起始点和地面也作为一个平面#include "stdio.h"#include "string.h"#include "algorithm"using namespace std;const int inf=0x3f3f3f3f;struct

2015-03-20 15:34:57 444

原创 HDU 3085 双广

n*m地图上有‘. ’:路‘X':墙’Z':鬼,每秒蔓延2个单位长度,可以穿墙,共两个,每秒开始时鬼先动‘M’:一号,每分钟可移动3个单位长度‘G’:二号,每分钟课移动1个单位长度问两人是否可以成功碰面,再不被鬼吃掉的前提下双向广搜,对于‘M’,每次搜三步,对于‘G’,每次搜一步。和鬼的距离可用曼哈顿距离计算判断注意每秒开始时鬼先移动#inclu

2015-03-17 17:26:56 1683

原创 HDU 5188 背包

有N道题,要求得到最少W分给出N道题的:每道题用时T,分数V,应在且必须在L时刻提交才能得分问得到W分所用的最少的时间以L-T排序,然后做01背包即可#include "stdio.h"#include "algorithm"#include "string.h"using namespace std;struct Mark{ int t,v,l

2015-03-16 15:36:10 751

原创 HDU 1560 IDA*搜索

用N个串中找到最短的公共串(不要求连续,只要相对位置一样即可)迭代加深搜索即可剪枝:当前的深度+最少还有加深的深度是否大于限制的长度,若是,则退回。#include "stdio.h"#include "string.h"const char ch[10]="ATCG";int deep,n;char s[10][10];int pos[10];//记录第i个序列正在使

2015-03-13 16:48:00 537

原创 HDU 3567 BFS+预处理

HDU 1043的加强版8数码问题给出8数码问题的两种状态,求从A状态到B状态的最优解,数据保证有解,若有多解,输出最短且字典序最小的。基本思路和1043的差不多,只不过这次要预处理出来9种情况的BFS即:    BFS(0,"012345678");    BFS(1,"102345678");    BFS(2,"120345678");    BFS(

2015-03-13 15:25:59 700

原创 UVA 11624 搜索

给出1000*1000矩阵,含起点‘J’,路‘.',墙‘#’,火‘F';火每秒蔓延一格,人每秒走一步问人是否可以安全走出矩阵,不能被火碰到先对所有火BFS一遍,记录每个点被烧到的时间然后对人BFS一遍,若到每点前没被火烧即可走#include "stdio.h"#include "string.h"#include "queue"using namespace s

2015-03-10 11:25:39 614

原创 POJ 3279 搜索

给出最高15*15的0 1矩阵,每次可以翻转一个点,其相邻的4个点都被翻转,问最少翻转几次可以全部变为0题中要求的字典序根本不用考虑。。。枚举第一行的翻转所有翻转情况然后逐行向下更新即可,因为第一行确定后,后面的都有唯一解#include "stdio.h"#include "string.h"int n,m;int vis[21][21],b[21][21],a[21][21

2015-03-10 10:36:09 558

原创 HDU 2612 水BFS

两个人(Y和M)要在‘@’处相遇,图中有不定个‘@’;对每个人做一遍BFS即可,然后枚举每个‘@’位置#include "stdio.h"#include "string.h"#include "queue"using namespace std;const int inf=0x7fffffff;const int dir[4][2]={{1,0},{-1,0},{0,1

2015-03-09 20:06:21 548

原创 HDU 1823 二维线段树

二维线段树入门题分别以身高和活泼度开两维以身高-100,活泼度*10,为两个区间所谓的二维就是在第一维查找到正确位置时,进入第二维再查找#include "stdio.h"#include "string.h"double ans;double Max(double a,double b){ if (a<b) return b;else return a;

2015-03-08 19:32:26 706

原创 HDU 4553 线段树双关键字区间合并

用两个关键字记录,分别为屌丝时间和女神时间若屌丝约,更新屌丝时间若女神约,更新屌丝和女神时间学习,则两个全部清空#include "stdio.h"#include "string.h"struct Data{ int l,r,x1,x2,l1,l2,r1,r2;}data[400010];int Max(int a,int b){ if

2015-03-08 16:24:22 611

原创 HDU 3974 线段树(将树映射到区间)

第一次写将树映射到区间的线段树。。。线段树部分很简单主要是将原有的关系树根据BOSS关系从新编号以便把每个BOSS所带领的员工全部压入一个连续区间内然后记录每个BOSS的起始编号和他的最后一名的员工的编号然后用线段树成端更新,单点查找即可#include "stdio.h"#include "string.h"struct node{ int l,

2015-03-04 20:31:25 616

原创 HDU 1540 POJ 2892 线段树区间合并

给出N个点,M次操作,N个点开始在一条线上链式相连D操作  把某点删除掉 Q操作  询问某点一共可以连接多少个点R操作  把上一次删除的点还原线段树处理区间合并分别记录每个区间的左端连续最长和右端连续最长#include "stdio.h"#include "string.h"struct node{ int l,r,lx,rx,x;}data[2

2015-03-04 17:51:05 593

空空如也

空空如也

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

TA关注的人

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