自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

EaShion1994的专栏

程序猿的道路还要走很远~

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

原创 POJ_2385 Apple Catching(DP)

题目请点我题解:题目符合从多个最优状态得到当前的最优状态,所以是一道DP没错,那么关键是dp数组的定义以及递推方程。开始的时候按照自己的思路,将连续多次的同一水果掉落合并,dp数组dp[i][j]定义:在转过i次后到达j位置的最优结果。递推关系:dp[i][j] = max(dp[i][j],dp[i-1][k]+get(k,j))   (k:i-1~j)  get函数得到k,

2015-08-31 14:53:21 561

原创 POJ_2229 Sumsets(greedy)

题目请点我题解:这道DP让我想了很久,感觉不难就是自己越绕越乱,一直找不出来关系。其实,我觉得应该先放下题目类型,从最根本递推关系去分析然后确定题目类型。若N为奇数的话,很容易想到组合数等于N-1,因为只增加1的话,可以证明任意一个组合情况都会有单独的1流出来,那么去掉这个1后就是之前的N-1了,递推关系:dp[N]=dp[N-1];若N为偶数,情况就会复杂很多,那么从总体考虑,N

2015-08-30 11:29:24 404

原创 POJ_3262 Protecting the Flowers(greedy)

题目请点我题解:这道题是贪心没错,根据提示的顺序第一眼看过去可能是按照D去排序贪心的,但是很容易举出反例(300,100)(1,1).所以不是那么简单。但是很明显可以知道一定是关于DT的某种关系的贪心,试了一下相乘与相除,相除符合,就直接写了。WA了一次因为结果是LL,这点好像很容易在贪心中用到。后来看了网上的题解,贪心的证明:牛A和B,选择的时候代价Ta*Db 与Tb*Da比较,

2015-08-30 09:46:27 479

原创 POJ_3040 Allowance(greedy)

题目请点我题解:这道题是贪心没错,但是贪心的方法不好想,参考了别人的代码,希望最终自己能有所收获。贪心思想:每一次先从大的开始挑,在不超过C的情况下尽可能多的从大往小拿。如果凑不够钱数,在找到一个最小的满足条件的凑数。贪心原理:在钱数一定的情况下,我们应该保证每次多给的钱越少越好。所以每次能给大面值就先给大面值,不够的话用小面值补充,这样可以保证最后不会超的很多。参考博

2015-08-29 17:01:19 462

原创 USACO Ordered Fractions(枚举)

题目请点我题解:最开始的时候想要大数去做,但是发现实现不了,其实是想多了,分子和分母都必须是代码实现:/*ID:eashionTASK:frac1LANG:C++*/#include #include #include #include #include #define MAX 170#define LL long longusing namespace

2015-08-27 17:05:16 418

原创 USACO The Castle(flood fill)

题目请点我题解:这道题真的好蛋疼啊,首先题意不好理解,搞了半天复杂的要死,有那么多要求,还要求那么多东西,做到一半都不想做了。。。感觉没什么技术含量,还做起来死费劲儿。但是强迫症非得按顺序做题啊,最后还是一点点把它给调出来了,说什么flood fill,其实也就是那么回事,没什么算法上的技巧,就是见招拆招的感觉。。。题意搞懂再做题,题意,不谢!第一步,根据他的规则把房间画出

2015-08-27 15:24:43 931

原创 POJ_2528 Mayor's poster(线段树+离散化)

题目请点我 题解: 这道题与之前的题目相比重点在于一个映射的预处理,题目所给的区间达到10000000,而最多只有10000个点,如果直接建树的话太过于空旷。把这些区间的左右节点一一对应,最多有4×10000个点,远小于之前的10000000,而且区间之间的对应关系也不会改变。 举个例子: 区间:[2,6],[4,8],[6,10] 我们进行下面对应: 2 4 6 8

2015-08-25 21:28:17 663

原创 POJ_3468 A Simple Problem with Integers(线段树+lazy标记)

题目请点我 题解: 这是一道简单的线段树外加lazy标记,与之前一道HDU_1698 Just a Hook的区别在于这题区间内的数值不完全相同,lazy数组和segTree数组将不能共用。 这道题让我对lazy数组又进行了思考,lazy数组作为一个辅助数组,它的作用就是用来统一描述某一个节点发散出去的子树的性质。借用一个形象的比喻,是爸爸懒得去更新所有的孩子而做的一个标记,从该爸爸节点发散出

2015-08-24 17:32:42 488

原创 HDU_1698 Just a Hook(线段树+lazy标记)

题目请点我 题解: 接触到的第一到区间更新,需要用到lazy标记,典型的区间着色问题。 lazy标记详情请参考博客:http://ju.outofmemory.cn/entry/99351 简单讲就是被lazy标记的非叶子节点所包含的所有叶子节点具有相同的性质,当更新或查询到该区间时,不再向下递归,仅对当前节点的lazy标记进行修改。 update : 如果当前区间刚好完全在目的区

2015-08-23 21:54:40 758

原创 HDU_2795 Billboard(线段树)

题目请点我 题解: 当使用普通数据结构不能满足要求是,就要想到其他的数据结构来维护。这道题用线段树维护查找,可以满足O(NlogN)的时间复杂度。 注意这句话:When someone puts a new announcement on the billboard, she would always choose the topmost possible position for the a

2015-08-23 19:43:25 468

原创 HDU_1394 Minimum Inversion Number(线段树)

题目请点我 题解: 这道题不容易看出是线段树,但是我们可以先来分析题意。 给出一个数列,注意是a permutation of the n integers from 0 to n-1,其实是其他的算法也是一样的。要找到逆序数最起码是O(N^2)的时间复杂度,之后还要求变换后的。那么对于每一个数来说我们都要进行一次查询,怎样优化查询的时间复杂度呢?对了,线段树!(当然树状数组貌似也可以求解,之

2015-08-23 10:50:28 568

原创 HDU_1754 I Hate It(线段树)

题目请点我 题解: 求区间最大值的裸题,与求区间和的线段树只是局部有改动。 代码实现:#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#define MAX 200010#define LL long longusing namespace std;int N,M;char ope;i

2015-08-22 20:58:13 414

原创 HDU_1166 敌兵布阵(线段树)

题目请点我 题解: 这是我写的第一道线段树,看大家好多都是把它当作第一道练手。其实线段树作为一种数据结构,比赛时是作为维护工具使用的,风格较为固定,关键要掌握原理,看清楚每一步的含义。所以可以先照着打一遍,然后最好还是能自己不看原来代码重新敲一边,就是这样,理解了的才能真的是自己的。 代码实现:#include <iostream>#include <cstdio>#include <cs

2015-08-22 20:30:06 924

原创 POJ_1067 取石子游戏(Wythoff Game)

题目请点我 题解: 其实就是裸的威佐夫博弈,只需要记住公式a=[j(1+√5)/2],b = a+j 就好了。注意最后取整要进行的强制转换。 代码实现:#include <iostream>#include <math.h>using namespace std;int a,b;int main(){ double tmp = (sqrt(5.0)+1)/2; while

2015-08-21 17:26:26 541

原创 POJ_2505 A multiplication game(博弈,range)

题目请点我 题解: 这道题是遇到的第一道相乘的题目,考虑的是谁能先大于等于N。对于这类题目,我觉得不太容易像Nim游戏一样找到一个平衡状态。从必胜态和必败态去考虑,我们转化为一个找每个人必能达到的范围的问题。首先,对于先手来说,2~9为必胜区间,不管先手如何,后手所能达到的最小值是18,所以后手的必胜区间是10~18。之后依次类推,每次在考虑临界值的时候,每个人都是希望自己能更大,而对手是希望更

2015-08-21 16:41:46 618

原创 POJ_2975 Nim(Nim)

题目请点我 题解: 题目还是经典的Nim游戏,但是结果要输出所有可能的“winning move”.Nim游戏终究还是二进制异或的问题。先考虑输赢,如果异或结果等于0,则必败。当异或结果不等于0,一种情况为结果等于2^x,也就是说某位上奇数个1,所以我们拿走任意一个都可以;另一种情况结果!=2^x,所以存在多个位上有奇数个1,解决方案是拆掉最高位1,使其他位满足有偶数个1,只有一种解法。所以关键

2015-08-21 15:38:35 705

原创 HDU_3746 Cyclic Nacklace(KMP)

题目请点我 题解: 题目大意:有一个字符串s,可以在前后添加字符,使字符串成为一个循环次数至少为2的循环字符串,输出最少需要添加的字符数目。 首先可以证明题目可以等价为只在末尾添加字符使满足题意,要找到添加资格字符我们首先要找到循环单位的长度,利用一个辅助数组储存从起始位置开始长度为i的串的循环长度,初始值为i,利用与Next数组之间的关系来更新,找到循环长度,比如字符串abcabc,Next

2015-08-21 11:08:26 655

原创 POJ_1961 Period(KMP)

题目请点我 题解: 这道题是KMP的变形,关键是找到重复单元的长度。设置一个辅助数组,用于存储长度为i的串的重复单元长度,对于任意长度的串初始化重复单元长度为自身,当满足关系式能够更新时再去更新。 代码实现:#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#define MAX 100001

2015-08-19 15:57:22 451

原创 HDU_3336 Count the string(KMP)

题目请点我 题解: 题意是在确定了一个前串后,问能找到多少个与前串对应的后串。注意后串是可以重叠的,比如aaaaaa,若固定前串为aa,则后传为aaaa,共有三个与之匹配,所以共有四个aa字串。最开始的思路是枚举字串的长度,但是是O(N^2)的时间复杂度,超时了很多次。后来借鉴同学的方法,换了一种思路,每次利用while循环找到以A[i]结尾的长度不大于i/2的匹配子串。不考虑子串的长度,而是考

2015-08-19 10:26:23 809

原创 HDU_1850 Being a Good Boy in Spring Festival(Nim)

题目请点我 题解: 这道题是Nim的变形,要求求出有多少种必胜的策略。当状态为奇异状态时有等式:a0^a1^a2…..^an=0.则我们要求的就是有多少种可能使经过一次变换得到奇异状态。又有等式a^b^(a^b)=0,则若当前状态是a^b^c^=0时,若c>(a^b),则我们就可以经过一次操作得到奇异状态。同理,多个变量也是一样,我们挨个比较就好了。设a0^a1^a2…..^an=res,则ai

2015-08-16 22:38:04 445

原创 HDU_1847 Good Luck in CET-4 Everybody!(SG函数)

题目请点我 题解: SG裸题,这道题用dp先打表预处理就会比较方便。 代码实现:#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <set>#define MAX 1024using namespace std;int N;int A[10];int grundy[MA

2015-08-16 14:28:09 447

原创 HDU_1536 S-Nim(SG函数)

题目请点我 题解: 做的第一道SG函数的模板题,体会到了SG函数的强大之处。利用有向图来理解还是比较好理解的,每一堆都等价为一个Nim游戏,结果取异或。SG函数的求值看到两种方法,一种是递归,另外一种是dp,觉得递归更方便一点。 代码实现:#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#i

2015-08-16 11:49:49 422

原创 HDU_4300 Clairewd’s message(KMP)

题目点这里 题解: 这道题题意不是很好理解。每次输入第一行给一个密码表,第二行是一个翻译了一半的密文(也可能翻译完成)。将密文再按照密码表全部翻译一遍后,结尾已经翻译过的部分会合原密文相同。从(len+1)/2处截开,然后拿原文KMP比较,最后匹配成功的位数就是已经翻译好的位数,对应输出就好了。实现稍微有点复杂。 代码实现:#include <iostream>#include <cstdi

2015-08-14 16:50:24 511

原创 HDU_1711 Number Sequence(KMP)

题目请点我 题解: 刚学会KMP,一道练手题,没什么难度,就是简单的模板。KMP注意好i,j的取值与变换就好了。 代码实现:#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#define MAX_N 1000010#define MAX_M 10010using namespace std

2015-08-14 13:17:27 367

原创 HDU_4731 Minimum palindrome(找规律)

题目请点我 题解: 这道题需要去分情况讨论: 1.当M=1,只能全是 ‘a’ 2.当M>2,只需要满足‘abc’循环就可以了,保证字典序最小。 3.当M=2,这个情况比较复杂,写起来很费劲,规律不好找很容易写错,看网上有说能2进制模拟,还没有学会,只能是一个一个写,找到规律也就简单了。其实这道题最好能够直接输出,不需要在对结果进行存储,存储反倒麻烦,就像套了一个笼子,操作起来很

2015-08-13 19:01:19 417

原创 HDU_1730 Northcott Game(博弈)

题目请点我 题解: 这是一道变形的Nim博弈问题,将每次两棋子中间相差的格数当作一堆棋子,谁取走最后一个(留给对方一个必败态),谁就获胜。转换为了Nim问题,最后直接套公式就好了。 代码实现:#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#define MAX 1010using name

2015-08-10 15:02:37 486

原创 POJ_3669 Meteor Shower(BFS)

题目请点我 题解: 这道题涉及到状态转换,所以放入到队列里广搜是没错的。最开始的思路是设定一个时间轴,按照每刻能走到的地方去扩展,按照炸弹的爆炸去排除一些点。这种思路是可以过得,但是可能稍微麻烦了一点,其实可以换一种思路,在最开始标记出所有会被炸到的点,然后可以对不会再扩展的点直接进行判断,而可以扩展的点一样拓展,可能会快一点。觉得自己的方法是笨了一点,可能会很浪费时间,而且会感觉很乱。 另外

2015-08-10 11:02:39 540

原创 POJ_3009 Curling 2.0(dfs)

题目请点我 题解:就是裸的深搜,注意看好题目要求条件。 代码实现:#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#define MAX 22#define INF 5000using namespace std;int W,H;int sx,sy

2015-08-09 14:27:01 434

空空如也

空空如也

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

TA关注的人

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