自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

luke2834的专栏

蒟蒻练级中。。。

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

原创 hdu 5195 BC#35 拓扑排序 优先队列 重复入队的想法 十字链表

题意 求可以删除K条边的DAG图的最大字典序的拓扑序列思路 用优先队列维护入度小于等于K的点(注意入队后,不改变K),BFS,每次看堆顶元素i的入度是否小于等于当前的K,是则K减入度,删去到i的边,继续从i搜索,否则出队,继续看堆顶元素,重复上述步骤。继续搜到的点入度如果小于等于当前K则入队,注意维护是否入队的数组,不要重复入队~注意点:(1)拓扑排序删边,不用真删,只要维护入度数

2015-03-30 21:10:40 514

原创 hihoCoder39周 归并求逆序对个数

#include #include #include #include using namespace std;const int maxn = 100005;typedef long long ll;int a[maxn];int n;ll guiBing(int l,int r){ if(l==r) return 0; int mid = (l+r)/2; l

2015-03-30 20:10:06 401

转载 混合图的欧拉回路(通路)判定

转的是邝神的解释~  原文:http://www.cnblogs.com/kuangbin/p/3537525.html就是对有无向边和有向边的混合图,判断存不存在欧拉回路。参考下面的解释:【混合图】混合图(既有有向边又有无向边的图)中欧拉环、欧拉路径的判定需要借助网络流!(1)欧拉环的判定:一开始当然是判断原图的基图是否连通,若不连通则一定不存在欧拉环或欧

2015-03-30 12:32:48 524

原创 Uva10054 无向图打印任意欧拉回路

题意 有一些双色水珠,串成一条项链,前后两个水珠的前后位置颜色要相同,问你可行吗?如果可行,把串的方法打印出来思路 颜色作为节点,水珠为边建图。先用并查集判断连通性,再判断是否为欧拉图,最后dfs打印~注意无向图用过一条边i->j后,要删去i->j和j->i,还有打印的时候有小技巧,可以体会下~#include #include #include #include usin

2015-03-29 21:35:52 548

原创 POJ1386 有向图是否存在欧拉通路

#include #include #include #include using namespace std;const int maxm = 100005;const int maxn = 26;int n,m;int ru[maxn];int chu[maxn];int mapp[maxn];int fa[maxn];int ra[maxn];char str[10

2015-03-26 13:56:43 656

原创 hdu5192 BC#34 树状数组维护

问题描述乐乐又开始搭积木了。他想在昨天搭完的积木上,重新搭建,使得其中有连续W堆积木具有相同的高度,同时他希望高度最少为H。乐乐的积木都这了,也就是说不能添加新的积木,只能移动现有的积木。他可以把一个积木从一堆移动到另一堆或者新的一堆,但是不能移动到两堆之间。比如,一次移动之后,"3 2 3" 可以变成 "2 2 4" 或者 "3 2 2 1",但是不能变成"3 1 1 3".请你帮他

2015-03-24 11:15:33 519

原创 hdu2689 树状数组 逆序数

#include #include #define maxn 1003int tree[maxn];int n;inline int lowbit(int x){ return x&(-x);}void update(int i,int x){ while(i <= n) { tree[i] += x; i += lowbit(i); }}int que

2015-03-23 18:38:20 402

原创 hdu1556 树状数组 区间修改,点查询

#include #include using namespace std;const int maxn = 100005;int tree[maxn];int n;inline int lowbit(int x){ return x&(-x);}void update(int i,int x){ while(i<=n) { tree[i] += x; i

2015-03-23 18:28:40 362

原创 POJ2406 KMP next数组妙用

题意 一个串可以被几个相同的子串叠加形成~给你一个串,找到满足要求的最小子串,最后输出几个这样的子串可以构成原串~思路 假设该串可以被不是它本身的子串按题意产生。那么由next[n](n是字符串长度),一定会形成类似的样子: |_____|__|,中间的|表示next[n]位置。(1)如果后半的串可以被n整除,那么可以形成|___|___|___|___|类似的样子(每段标号1,2,3,4),

2015-03-23 01:34:01 417

原创 hihoCoder 第38周 二分答案+BFS

题意 在这个游戏里面,海域是N个战略点(编号1..N)组成,其中红色的点表示有敌人驻扎,猫头像的的点表示该地图敌军主力舰队(boss)的驻扎点,虚线表示各个战略点之间的航线(无向边)。在游戏中要从一个战略点到相邻战略点需要满足一定的条件,即需要舰队的索敌值大于等于这两点之间航线的索敌值需求。由于提高索敌值需要将攻击机、轰炸机换成侦察机,舰队索敌值越高,也就意味着舰队的战力越低。另外在每

2015-03-22 21:48:53 611

原创 POJ2752 KMP next数组的活用

题意 给你一个串,找出它的所有子串,这些子串要求既是原串的前缀,也是原串的后缀思路 考察next数组的理解,对串中任意位置i来说,0~(next[i]-1)这个子串,是原串的一个前缀子串,同时它和(i - next[i])~(i-1)这个子串是相等的。因此令i = n,则通过next[n]可以找到一个满足题目要求的最长子串(除了原串外),然后迭代的去找这个最长子串满足条件的子串~注意:ne

2015-03-22 18:56:37 373

原创 hdu5191 BC#34

题意 参见原题,有中文版~思路 只要砖的数量够就肯定可以达到目标~然后想想暴力怎么做呢?枚举i,看i到i+w的序列,去找比h高的砖堆高出的总数和比h矮的砖堆矮的总数,然后取max,就是这个子序列需要移动砖的总数~因此W*n的复杂度,找到最优的情况~但是复杂度超了,所以考虑i~i+W这个序列和i+1~i+W+1这个序列,高的总数和矮的总数是可以递推过来的~因此降到O(n)的复杂度。另外,他说可以

2015-03-21 22:42:32 456

原创 hdu5190 BC#34 水题

水题,4分钟过,还可以~#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define I64_MAX 9223372036854775807 typedef long long

2015-03-21 22:38:02 480

转载 jdk与jre的区别

原文地址:http://www.cnblogs.com/myitm/archive/2011/05/03/2035942.html很多程序员已经干了一段时间java了依然不明白jdk与jre的区别。JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Ki

2015-03-20 18:31:14 333

原创 hihoCoder 1114 扫雷1

题意 在一个大小为2*N的广场,其中第一行里的某一些格子里可能会有至多一个地雷,而第二行的格子里全都为数字,表示第一行中距离与这个格子不超过2的格子里总共有多少个地雷,即第二行的第i个格子里的数字表示第一行的第i-1个, 第i个, 第i+1个,三个格子(如果i=1或者N则不一定有三个)里的地雷的总数。找出哪些地方一定是雷,哪些地方一定不是雷。思路这题被卡智商了...还以为是人工智能的推

2015-03-20 08:21:32 864

原创 课程实验1 基于java Socket的C/S小程序

前言网路程序设计这课完全是基于java的,而本人java学的很渣...再加上没有网络编程经验,学起来真是苦啊...所以励志这两个月好好攻一下java,至少要把基础掌握牢!    这系列博客,算是我的学习体会和经验吧,其中肯定会有一些错误,当然我也会在发现错误及时纠正的~如果得幸,有神牛看了我的文章,挑出了我的问题,请不要吝惜的给我指出来~非常感谢~了解的知识点这次我做的是一

2015-03-19 19:51:21 1216

原创 hihoCoder37周 分治 O(n)第k大数~

题意 给你无序序列,找第k大的数思路 直接排序就能过。。。不过为了练练手,就写了个O(n)的算法~很经典~   快排算法,向枢轴两侧递归的去快排,而这里指向一边去快排,当枢轴位置>k,向左快排,反之,向右即可~#include #include #include #include using namespace std;int a[1000006];int n,k;i

2015-03-19 13:08:52 570

原创 POJ1742 多重背包 递推关系优化

题意 给你n种钱币,每种面值Ai,数量Ci,问你能凑成的不超过m的面值数量思路1 这是我起初的想法,优化了半天还是超时了...不过这里还是说一下,有些想法今后可能还会用到。      完全仿照多重背包的求解,把Ci拆分成一些2的次幂加和的形式,具体可参看背包九讲~但这样复杂度多出了一个logC,就会超时...然后我想m种面值不可能都达到,因此我每次只遍历已经达到了面值,然后更新出来的新值加

2015-03-18 10:52:59 773

原创 hdu5025救唐僧 优先队列实现的BFS再加点状压 网赛题~

题意 在一个矩阵里,救唐僧,要求在其中收集够钥匙,才能救。另外,一些cell中有蛇,通过这样的房间要杀掉蛇并多花一分钟,最后问你最少花费多产时间。思路 做这题,本来想要练练A*的,结果h函数设计的还是不够好,WA了,没办法,还是让h函数为0过了...之后还得想再设计一些h函数试试~   这题中蛇不超过5只,用状态压缩一发就行了~其它的就是有些琐碎实现的时候要多注意一下就好了~#incl

2015-03-17 22:18:17 433

原创 Uva 437 DAG上的DP 记忆化搜索实现

题意 #include #include #include #include #include #include using namespace std;const int inf = 0x3f3f3f3f;typedef pair PII;typedef pair PI;#define MP make_pair#define PB push_back

2015-03-17 14:06:04 821

原创 UVa1025 DP (还要再看看~)

题意 请参考紫书描述~思路 状态开始没有定好,还是参考了下紫书..    dp[i][j] 表示在第i秒,第j个站上,一共的最少等待时间            初始条件dp[T][n] = 0,其它赋值为inf            转移:(1)在该站等一分钟(2)若有向左走的车,则可以乘上(3)若有向右走的车,则可以乘上  更新顺序:时间i倒着遍历  注意:数组要

2015-03-16 18:54:06 1475

原创 POJ3280 串上的DP

题意 一个字符串,可以在任意位置加字符或者删去任意字符,使得字符串成为回文串。加不同字符或删去不同字符有不同的代价,问使得它成为回文串的最小代价是多少?思路 这题本身不难,和最长公共子序列很相似,但我做类似的dp较少,状态没有找好,费了不少功夫。下面列出破题的主要几个重点:(1)删去和添加同一个字符本质是一样的,只要取那个代价小的就行(2)状态取从i位置到j位置的最小代价,dp[i][

2015-03-15 20:10:50 414

原创 POJ2538 还能再水一点吗...

#include #include #include #include using namespace std;map mapp;int main(){ mapp['1'] = '`'; mapp['2'] = '1'; mapp['3'] = '2'; mapp['4'] = '3'; mapp['5'] = '4'; mapp['6'] = '5'; mapp['

2015-03-15 17:39:47 583

原创 POJ3616 简单DP

题意 有m个区间,区间有一个权重,区间间有交叉,问你怎么选择区间让权重之和最大思路 这题递推时,主要要想到,如果新的区间和之前选好的那个区间有交叉,那么去掉已选好区间最后面的那个区间,新的区间一定可以放进去。dp[i]表示前i个区间,第i个区间一定放入的最大权值和。先按开始时间进行排序。当start[i] >= end[j]时,dp[i] = max(dp[i],dp[j]+val

2015-03-14 12:07:08 470

原创 POJ1565 水题

#include #include int main(){ char str[33]; while(scanf("%s",str)==1&&strcmp(str,"0")) { int len = strlen(str); int sum = 0; for(int i=0;i<len;i++) { sum += (int)(str[i]-'0') * ((1<

2015-03-13 07:22:01 555

原创 hihoCoder36周 练一下lower_bound~

题意 给一个无重复元素的序列,找数x是否属于它,若属于给出x在其中是第几大的。思路 本来这题应该是让我们练习一下用快排思想用O(n)的算法找x是第几大的,不过先排序在二分也能解决,所以我一懒就用STL了.....就当练练STL使用了....#include #include #include using namespace std;const int maxn = 1000

2015-03-13 00:00:54 381

原创 POJ1273 最大流模板题 初学网络流~

题意 不细说了,就是源是1,汇点是m的最大流模板思路 初学网络流,拿这题练练手。  总结下EdmondsKarp算法几个要注意的点:           (1)算法本质就是利用BFS不停地找增广路,直到找不到为止。           (2)每次BFS后更新增广路时,一定注意减去或加上的都是最后Terminal得到流量。           (3)用连接表存的时候,为了

2015-03-12 18:38:05 722

原创 hihoCoder1044 简单状压DP

题意 1到n的序列,每个位置wi个垃圾,一个人打扫,但连续m个位置最多有q个位置被打扫,问你最多打扫多少垃圾思路 由于m较小,所以可以使用状压dp(当然本来这题就是专门练状压dp的...)。总体思路不难,但有一些地方卡了我一下的这里说一下,一是连续m个位置看起来比较复杂不好处理,但是仔细一下可以发现,如果当看到第i个位置时,只需要考虑它和它前面m-1个位置就可以了,它后面的由后续工

2015-03-12 18:05:49 1314 2

原创 POJ2385 简单DP

题意 两棵苹果树,每一分钟某一颗树掉一个苹果,一个人接苹果,她每一次掉落苹果时只能在一棵树下等待。给你总时间T,人最多可以在两棵树间移动的次数W,还有每分钟是哪棵树掉苹果,问你她最多接多少个苹果。思路 dp(i,j,k)表示在前i分钟,最多移动j次,并且在i分钟站在第k棵下时最多接到的苹果数。a[i]表示i分钟时哪棵树掉。   状态转移 dp(i,j,a[i]) = max(dp(i-1,

2015-03-11 12:31:43 568

原创 poj2229 简单DP

题意 把n拆分为2的幂相加的形式,问有多少种拆分方法。思路 比较好的DP方案开始没有想到,所以这里列出两种方案吧   (1)DP(i,j)表示第i个数,最小数由2的j次方来组合得到的方案数。状态转移dp[i][j] = (dp[i][j+1] + dp[i-(1初始条件 dp(1,0) = 1   (2)更好更简单的方法是分奇偶考虑,奇数时就是dp(i) = dp(i-1)

2015-03-10 21:03:15 363

空空如也

空空如也

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

TA关注的人

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