自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BootStar

Just For Dream

  • 博客(18)
  • 资源 (2)
  • 收藏
  • 关注

原创 uva 10465 Homer Simpson

Homer Simpson 题目很简单就是完全背包问题,不过需要记录过程中的数量以及对应的价值总和,以最后的价值总和最大为标准,然后求解。程序如下:#include#include#define max(a , b) a > b ? a : b #define MAXN 10010int dp[MAXN] ;int value[MAXN] ;int num[3]

2012-05-31 14:52:26 397

原创 hdoj 1520 Anniversary Party

Anniversary Party树形dp,采用左儿子右兄弟的方式来存储,然后采用递归的方式dp。动规方程很简单,类似于01背包的情况。这里就不在写了。具体的见程序。程序如下:/*ID :csuchenanPROG: hdoj 1520 Anniversary partyLANG: C++*/#include#define MAXN 6010struct Node{ i

2012-05-27 00:11:15 451

原创 hdoj 2795 Billboard

Billboard题目意思很简单,给一个面积为h*w的板子,每次选择一个最上且最左的区域贴上一张纸1*wi,求每次贴的行。每次找出行中保留面积能够满足纸的面积的即可。如果直接用数组模拟的话,肯定会超时。这个题目可以用线段树做。看题的时候,发现h比较大,开数组肯定会超内存。分析一下,发现有n次插入,我们可以假设每次都只能在新的一行中插入,在极限数据下,也只需要4*200000的空间,这样肯定不会

2012-05-24 14:38:40 386

原创 hdoj 1698 Just a hook!

Just a hook!题目意思很清楚,就是对某个区间的数全部更改为某个值。只进行一次查询。用线段树来实现。由于要不断的更改,所以我们这里采用lazy思想,即标记延迟。在更改的时候,并不更改到每个节点,而只是更改到某个区间上,用一个变量记录更改量。当进行下次更改的时候,在更改。程序如下:#include#define MAXN 100005struct Node{ int l

2012-05-23 19:59:06 401

原创 hduoj 3415 Max Sum of Max-K-sub-sequence

Max Sum of Max-K-sub-sequence求解一个数字环中的长度不超过k的连续之和,使得和最大,若存在多个,输出起始位置最小的,同时,长度最短的。一个单调队列的问题,需要对问题有一个很清楚的了解。设nsum[i]表示前i个数字的和,那么很容易,表示出从i+1 开始的到位置j结束的这串数字的和: nsum[j] - nsum[i],由此我们就可以很容易,得到此问题的解,max

2012-05-21 21:03:39 736

原创 FZUOJ 1894 志愿者选拔

FZUOJ 1894 志愿者选拔从一个数字序列中不断的求当前序列的最大值。采用单调队列。维护一个单调递减的队列,注意删除的时候,比较当前的最大元素即当前的队列头的位置,如果这个位置大于要删除的位置,则不需要移动,否则就将队首指针移动。程序如下:/*ID : csuchenanPROG : fzuoj 1894LANG : C++*/#include#include#def

2012-05-20 13:47:18 702

原创 POJ 2823 Sliding Window

Sliding Window题目意思很简单,求解给定一个区间中的最小与最大,但此题不适合用线段树解,因为区间动态的变化。用单调队列比较适合,也可以用2个堆来维护,一个维护最大,一个维护最小。用单调队列实现的程序如下:/*ID: csuchenanPROG: POJ 2823LANG: C++*/#includeconst int maxn = 1000000 ;#defi

2012-05-20 12:34:51 364

原创 CSUOJ 1063 Sequence

CSUOJ 1063 Sequence题目虽然看起来比较繁琐,但是意思还是比较明确的。有一组数据a[0...n],通过给定的操作运算符,得到对应的b[]数组,然后让你推断出a数组的取值有多少中可能性,其中a中的数字都是正整数。比赛的时候,我是想通过二分搜索来找出这个区间,但是用二分搜索的时候,判定条件有点难写找区间的上下范围。不过这个题目不用这样,这样反倒使问题更复杂了,其实我们可以将除a[0

2012-05-20 11:54:38 380

原创 HDUOJ Minimum Inversion Number

Minimum Inversion Number题目意思很明确,每次将序列的第一个元素放到序列尾,产生一个新序列,求出序列中逆序对的个数,一共有n个这种序列,输出其中最小的逆序对个数。先用线段树求解出最原始序列的逆序对的个数,然后递推。对原始序列的逆序对的个数,在节点信息中添加一个某个区间元素的个数的变量,每次加入新元素的时候,统计当前情况下,其前面的比它大的元素的个数,然后在将元素插

2012-05-16 14:34:14 304

原创 hduoj 1754 I Hate it

I Hate it对于区间的值进行修改与查询最大,采用线段树解决。用一个变量来记录某个区间的最大值,同时每次更新后,需要递归回调每个区间的子区间的最大值。用于更新父节点的最大值。程序如下:/*ID: csuchenanPROG: hduoj 1754 I hate itLANG: C++*/#include#include#include#define max(a ,

2012-05-15 21:50:02 485

原创 hduOJ 1166: 敌兵布阵

http://acm.hdu.edu.cn/showproblem.php?pid=1166题目意思很明显,需要多次查询,多次进行修改操作。用线段树做,由于每次只对一个点进行修改,所以数据结构中只需要包含和项,而不必要包含修改标志。代码如下:/*ID: csuchenanPROG: hduoj 1166 敌兵布阵LANG: C++*/#include#includ

2012-05-15 19:47:55 538

原创 ZOJ1074

ZOJ1074题目很明白,就是求解最大的字段和问题。可以由一维的推到而来,对于二维的我们可以转化为一维的来求解,方法是将从第i行到第j行的每一列对应的元素相加,然后在利用一维求解最大字段和的方式,就可以得到第i行到第j行的最大的字段和。利用此思想我们一次枚举可能的i,j值,然后嵌套求解即可。时间复杂度为O(n^3)。代码如下:/*ID: csuchenanPROG: ZOJ1074L

2012-05-12 23:52:03 363

原创 ZOJ 1002 Fire Net

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2一道搜索的题目,数据量不是很大用深搜。判定一个点是不是能否放置碉堡,搜索其上方与左方是不是放置了碉堡。同时还要搜索该位置不放置碉堡(即使能放置)的情况。开始的时候没考虑到这一点,每次运行的结果总是0。考虑后,问题就解决了。程序如下;/*ID: csuchenanPRO

2012-05-04 15:12:27 417

原创 ZOJ 1008 Gnome Tetravex

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=8题目意思很简单,数据量也比较小,只需用dfs即可,不过还是需要剪纸,对于相同的类型的卡片记录数量,这样才不会超时。对于每一次放置的时候我们都要判断放置是不是合法,则个只需要通过一个简单的上左判断即可。程序如下:/*ID: chenanPROG: zoj 1008 Gn

2012-05-04 14:06:05 437

原创 POJ 1745 Divisibility

http://poj.org/problem?id=1745题目意思很简单,很少做这类型的题目,想要搜索,但是空间太大,想用dp,但是没想到dp的方程,然后上网搜了一下别人的解题报告,看了一下数据存储,就恍然大悟。这里由于除数很小,所以每次我们只需不断的取模即可。dp[i][j]表示前i个数通过添加加减号能否得到结果j,如果能则置为1,否则置为0.动规方程:dp[i][j] = dp[i-1]

2012-05-03 09:25:08 369

原创 乘积最大

http://www.rqnoj.cn/Problem_311.html区间dp问题。问题的一般形式为对于长度为j的字串插入i个*号,使得对应的结果最大,设用dp[i][j]来保存结果,插入i个*号后,字串被分为j段,问题的解即变为对于前j-k 个字串插入i-1个*对应的结果然后乘以区间(j-k+1 , j)的最大值。动规方程dp[i][j] =max{ dp[i-1][k] * resu

2012-05-02 20:26:02 427

原创 过河卒

http://www.rqnoj.cn/Problem_69.html坐标DP问题,本题比较简单,动规方程dp[i][j] = dp[i-1][j] + dp[i][j-1] ,对于特殊的点,只需要判断一下,然后赋值为0即可。虽然数据规模比较小,但是结果却比较大,需要用long long存储,同时输出的时候用%I64d输出,用%lld出错。代码如下:/*ID: csuchenanPRO

2012-05-02 19:32:43 506

原创 Codeforces round 112 DIV2 B Burning Midnight Oil

题目很简单,开始的时候没想到用二分,经过一次二分搜索的学习后,对二分搜索的应用有了深刻的认识,然后就做了这个题目。同样是利用二分搜索,属于找下界的题目,代码很简单,不过需要注意两种情况:1. 当n#include#includeusing namespace std ;bool judge(int v) ;int n ;int k ;int main(){ scanf("

2012-05-02 01:03:50 481

AC自动机pdf

关于AC自动机的pdf文档,很清楚的讲解了AC自动机算法及应用

2012-08-07

空空如也

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

TA关注的人

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