自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 POJ 3034 Whac-a-Mole DP

题意:在一个n*n的矩阵中,每个(x,y)坐标有个洞,在任意时刻(从上一时刻开始到目前时刻结束),任意位置可能会探出一个鼹鼠的头,如果用锤子 打中即得一分,锤子活动的范围是以d(1=<d<=5)为半径的圆中可到达的坐标点,并且是直线移动,锤子可以移动到任意位置,同一时间同一 地点

2011-08-31 22:11:50 1625

原创 POJ 2948 Martian Mining DP

题意:题意:一个row*col的矩阵,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少。如图所示,最北边有bloggium的收集站,最西边有 yeyenum 的收集站。现在要你在这些格子上面安装向北或者向西的传送带(每个格子自能装一种)。问

2011-08-30 22:01:55 976

原创 POJ 2029 Get Many Persimmon Trees DP/二维树状数组/线段树

题意:给定一个由坐标系构成的柿子树林,有的坐标点上存在柿子树,有的不存在。现在准备送给你一块土地,土地的长和宽已经确定,怎么选才能使给你的土地上的柿子树最多。题解:这道题和 2482 Stars in Your Window 颇为相似。下面给出了三种解法。方法一:DP#include using namespace std;#define N 103int

2011-08-30 20:37:19 635

原创 POJ 3280 Cheapest Palindrome DP

题意:给定一个字符串,将它调整成回文串。可以在它上面添加或者删除任意一个字符,但是每增加或者删除一个字符都有一个代价,求代价最小的方案。题解:添加和删除的操作其实一样,所以只要求出添加和删除的较小值,作为对该字符进行操作的代价。#include using namespa

2011-08-30 12:28:04 550

原创 POJ 1054 The Troublesome Frog 搜索+剪枝

题意:稻田里的青蛙沿直线跳跃,每一只青蛙的跳长一定,现在发现稻田里有许多青蛙跳过的痕迹,根据这些痕迹求跳跃次数最多的那一条路线。题解:注意题目的要求,首先要保证青蛙能从边界跳到所求路径的的开始位置,然后跳跃次数少于3的不算。一条直线上的点可以是不同青蛙跳跃的痕迹。先排序,然后枚举开始的两个点,其实也就相当于枚举斜率,然后计算每一条斜率上最多的跳跃次数。#include #inc

2011-08-29 11:07:18 952

原创 POJ 1191 棋盘分割 DP

题意:将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行) 原棋盘上每一格有一个分值,一块矩形棋盘的总分为其

2011-08-28 19:07:58 1170

原创 POJ 1934 Trip DP

题意:求最大公共子序列,并按字典序输出最大子序列。题解:题目的难点在于输出。看了http://www.cppblog.com/varg-vikernes/archive/2010/09/27/127866.html1.用 pos1[ i ] [ j ] 代表字符 'a'+

2011-08-28 14:23:30 2411

原创 POJ 1159 Palindrome DP

题意:给定一个字符串,至少插入几个字符才能使它变成回文串。题解:总结了三种方法,具体如下。方法一:s1 为原字符串, s2 由 s1 从右至左复制得到。dp [ i ] [ j ] 表示让 s1 [ i ] 与 s2 [ j ] 左边的字符串完全相等最少需要插入的字符个数。1.当 s1 [ i ]  != s2 [ j ] 时,假设已知:substr1 : ··

2011-08-27 17:48:05 584

原创 POJ 1080 Human Gene Functions DP(LCS)

题意:每个碱基对有一个给定的值,‘-’ 与每个碱基也设定一个给定的值。现在有两个DNA序列,长度不一定相同,长度较短的可以插入‘-’使其与长度较长的对齐。求两DNA序列可获得的最大值。题解:首先定义对X(xm) = {x1,x2,x3,...xm};Y(yn) = {y1

2011-08-27 10:09:11 506

原创 POJ 1458 Common Subsequence DP(LCS)

题意:求最大公共子序列题解:当 i = 0 或者 j = 0 时 , c[i][j] = 0当 i , j > 0 ; xi = yi 时 , c[i][j] = c[i-1][j-1] + 1当 i , j > 0 ; xi != yi 时 , c[i][j]

2011-08-26 22:56:36 511

原创 POJ 3176 Cow Bowling DP

题意:和数塔一样,求最大值。题解:#include using namespace std;#define N 355int dp[N][N], num[N][N];int max ( int a, int b ){ return a > b ? a :

2011-08-26 21:15:21 525

原创 POJ 1260 Pearls DP

题意:有c个种不同品质的珍珠,若要买某一品质的珍珠必须在你买的数量的基础上,多付10个这种珍珠的价钱,可以用高品质的珍珠代替低品质的,以便节省一些开支。求要买到所有目标珍珠至少要花多少钱(可以用高品质的代替低品质的)。题解:#include using namespa

2011-08-26 20:58:28 453

原创 POJ 2533 Longest Ordered Subsequence DP(LIS)

题意:求最长不降子序列。题解:注意 n = 0 时要输出1.n^2算法#include int main(){ int dp[1005], a[1005]; int n, i, j, max; while ( scanf("%d",&n) != EOF

2011-08-26 10:30:30 534

原创 POJ 1836 Alignment DP(LIS)

题意:从一列队伍中抽出一些人,使得剩下的队伍中的人按身高有序排列(升序,或者降序,或者先升后降).题解:LIS。枚举边界。边界左边的人身高逐渐升高,右边的逐渐降低。#include #define N 1010double array[N];int dpleft[

2011-08-25 19:38:28 638

原创 POJ 3267 The Cow Lexicon DP

题意:给定一条原始字符序列,以及一些单词,问至少去掉多少个字母才能使原始序列全部由单词组合而成。题解:dp [ i ] 表示在第 i 个字母之前最少要删除的字母个数。枚举原始序列的每一个字母,0,1,2,3····。只有删与不删两种状态。假设删掉第 i 个字母,则 d

2011-08-25 10:54:15 540

原创 POJ 1837 Balance DP

题意:有一个天平,一些砝码和挂钩,要你将全部的砝码挂上使得天平平衡。题解:因为存在负值,所以用一个一位数组可能会使某个砝码被重复使用(当然,也有人用两个一维数组来解决)。而二维数组避免了这个问题。由于砝码能够产生的最大力矩为+-7500,我们设置一个偏移量以避免数组下标为负。

2011-08-24 10:22:49 535

转载 背包九讲

第一讲 01背包问题这是最基本的背包问题,每个物品最多只能放一次。第二讲 完全背包问题第二个基本的背包问题模型,每种物品可以放无限多次。第三讲 多重背包问题每种物品有一个固定的次数上限。第四讲 混合三种背包问题将前面三种简单的问题叠加成较复

2011-08-23 16:44:17 592

转载 关于线段树的update

下面这种方法对于区间两端如果数值一样的话,是无法update到那个区间的.if ( nod[t].lf == e.y1 && nod[t].rf == e.y2 ) nod[t].cnt += e.f;else { if ( e.y2 <= nod[t*2

2011-08-22 23:36:05 594

原创 HUD 1828 Picture 矩形周长/线段树

题意:求重叠矩形的周长。题解:枚举x区间时要注意求出, y 轴投影的线段数量。 即对应一个 x 有多少段不连续的线段,因为这关系的矩形的宽。 对 x 进行排列要记得入边在前,出边在后,否则边相交的两个矩形,就会把重边也计算在内。#include #include #include using namespace std;#define L(x) ( x <<

2011-08-22 23:03:48 819

原创 HDU 1255 覆盖的面积 线段树

题意:给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积.题解:和 poj1151 类似,不过要求的是面积的交,同样是先离散化然后枚举x坐标。此题更新时求y方向的“合法长度”相对于 poj1151 还有些区别, 值得比较比较。并且用lazy貌似也不合适,必须跟新至单元,因为每个节点既受父节点影响,也受子节点影响。len[1]是覆盖一次的长度,len[2]是覆盖次数>= 2的长

2011-08-22 13:04:05 1480

原创 POJ 1151 Atlantis 线段树/矩形面积并

题意:求矩形的面积并。题解:求矩形的并,由于矩形的位置可以多变,因此矩形的面积一下子不好求这个时候,可以采用“分割”的思想,即把整块的矩形面积分割成几个小矩形的面积,然后求和就行了这里我们可以这样做,把每个矩形投影到 y 坐标轴上来然后我们可以枚举矩形的 x 坐标,然后检测当前相邻 x 坐标上 y 方向的合法长度,两种相乘就是面积 然后关键就

2011-08-21 21:52:01 2060

原创 字符串四则运算(计算器)

今天就弄了这个,郁闷····bool CCalculate::isOperChar ( char ch ) /* 判断是否是加减乘除操作符 */{ if ( ch == '+' || ch == '-' || ch == '*' || ch == '/' ) retu

2011-08-18 17:26:46 4086

转载 矩形树

对于多维的问题,第一种方法几乎不可能使用。因此我们可以仿照第二种方法。例如对于n维的问题。我们构造以(a1,a2,a3,….,an,b1,b2,b3,….,bn)为根的线段树,其中(a1,a2,a3….,an)表示的是左下角的坐标,(b1,b2,b3,….,bn)表示的是右上角的

2011-08-16 23:16:40 1490

原创 HDU 1823 Luck and Love 二维线段树 / 矩形树

题意:本题有多个测试数据,第一个数字M,表示接下来有连续的M个操作,当M=0时处理中止。接下来是一个操作符C。当操作符为‘I’时,表示有一个MM报名,后面接着一个整数,H表示身高,两个浮点数,A表示活泼度,L表示缘分值。 (100题解:注意浮点数的处理,一般来说可以离散化,或者化作整数处理。二维线段树,第一维度的每一个节点都包含第二维度的一颗线段树。这种方式对于更高的维度就不是

2011-08-16 18:01:21 1413 1

原创 HDU 1754 I Hate It 线段树

题意:本题目包含多组测试,请处理到文件结束。在每个测试的第一行,有两个正整数 N 和 M ( 0学生ID编号分别从1编到N。第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,

2011-08-15 20:50:41 551

原创 POJ 2482 Stars in Your Window 线段树

题意:每一颗星星有一定的亮度值,现在坐标系中有许多星星,每个星星的坐标及亮度值已经给定,求一个矩形能够框住的最大值。Lazy 标记。题解:对每一颗星星,画出以它为左下角的矩形,这个矩形就是它的影响范围。为了方便处理,我们将每一颗星分作两颗,frist_star ( x, y, val ),  second_star ( x + w, y, -val ),这样当我们不断插入星星的时候,其

2011-08-14 23:07:50 1026

原创 POJ 3368 Frequent values RMQ / 线段树

题意;给定一个升序的数列(1-100000), 比如 array[10] =  -1  -1  1  1  1  1  3  10  10  10, 求其中某段区间上相同的数字最多有几个。[ 2, 3 ] = 1, [ 1, 10 ] = 4, [ 5, 10 ] = 3。(下标从1开始)。题解:先将连续相等的几个数合并为一个部分(part), 或者说一个点。每点包括了起始位置,终止位置,

2011-08-13 16:21:55 601

原创 POJ 3264 Balanced Lineup RMQ / 线段树

题意:给出一个队列,找出指定区间的最大值与最小值。题解:RMQ, 注意边界需要理清楚。参考http://www.cnblogs.com/cnjy/archive/2009/08/30/1556566.html    RMQ(Range Minimum/Maximum Query)问题:    RMQ问题是求给定区间中的最值问题。当然,最简单的算法是O(n)的,但是对于查询次

2011-08-13 09:55:27 501

原创 POJ 2752 KMP

题意:给定一个字符串, 如 alala, 求既是它前缀,又是它后缀的子串( a, ala, alala ) ,按升序输出所以可能的子串的长度。 题解:next 函数的应用。当然用hash也可以。#include using namespace std;#def

2011-08-12 21:44:18 568

原创 POJ 2406 KMP

题意:给定一个字符串,如 str : ababab, 则 str = ab ^ 3, 输出3。 又如 abcd, 输出 1。题解:next 函数的应用, 理解并记住。#include using namespace std;#define N 1000005c

2011-08-12 21:05:00 548

原创 POJ 1961 KMP

题意:输入一个字符串S,求的每一个前缀可否由某个更小的前缀重复构成。比如aabaabaabaab,前2位是aa,a重复了2次,前6位是aabaab,aab重复了2次,前9位是aabaabaab,aab重复了3次,前12位是aabaabaabaab,aab重复了4次。题解:算是

2011-08-12 17:15:45 538

原创 POJ 2492 并查集

题意:调查一种虫子的性行为,先假定虫子里没有同性恋。每一次测试输入N只虫,然后输入M个数对( x, y ),表示 x, y 之间有性行为, 最后判断假设成立与否(即判断有没有同性恋)。#include using namespace std;#define N 1000005int opp[N], father[N], rank[N];void make_set ( i

2011-08-11 17:03:14 1357

原创 POJ 1703 并查集

题意:有两黑帮,N个人,现在又一些信息,你需要根据这些信息确定这两个人之间是否属于同一个黑帮。有两种输入: D a b 表示a,b不属于同一个黑帮;A a b 询问a,b是否属于同一个黑帮,可以回答属于,不属于,不确定三种。题解:可以用带权的并查集解决。若a,b同属于一个集合说明二者的关系已经确定,输出属于或者不属于;否则输出不确定。当a,b同属于一个集合时,可以通过权值来判断它们的具

2011-08-11 15:23:24 936

原创 POJ 3067 树状数组

题意: 日本的东西海岸分别有 M, N 座城市,从北至南依次编号,现在东西海岸的某些城市之间修建公路,求所有交点的数量。题解: 若 a, b 两公路存在交点的话,必有 a.east b.west 或者 a.east > b.east, a.west #include #include using namespace std;#define N 1000005int n

2011-08-11 09:16:26 745

原创 POJ 2481 树状数组

题意:有n只奶牛,每一只有自己的强度,用闭区间 [ l, r ] 表示, 若有两只奶牛,强度分别为 A = [ a, b ], B = [ c, d ],当c 题解:注意排序的选择,选s还是t,升序还是降序,都有影响,要保持树状数组的性质,更新时最好向上,求和时最好向下。另外,将这题的左右区间变成坐标的话,有点类似stars那题。#include using namespace

2011-08-10 20:32:08 649 1

原创 POJ 3321 树映射到树状数组

题意: 有一颗苹果树,每一个节点生长一个苹果。有两种操作,Q(x) 输出某个节点的子树上一共有多少个苹果; C(x)存在苹果则摘下来,不存在则生出一个苹果。题解:很容易想到树状数组,而建立映射是关键。进行搜索给所有的节点编号,求出每一个节点管辖的范围(需包括节点本身和它子树上的所有节点)。然后只需对这些管辖区间进行维护,用树状数组。正如下图所示,每一个节点(即树杈)的编号是先序遍历

2011-08-10 16:29:46 736

原创 POJ 1656 二维树状数组

题意:给定100*100的网格,每个格子可以涂上黑色或者白色(初始时全部树白色),经过一系列操作后输出任意一个正方形区域内的黑色格子数。#include using namespace std;int c[110][110];int a[110][110];const int n = 100;int lowbit ( int x ){ return x

2011-08-09 19:07:20 554

原创 POJ 2155 二维树状数组

题意: 给出一个矩形的左上角和右下角(类似于矩阵), 被矩形框住的点需要改变它的值(0,1),给出一些操作,要求输出某点的值。本题是改变区域而求点。以二维树状数组来记录某点的改变次数。先想想一维数组,例如 c[1], c[2] , c[3], c[4], c[5], ....c[10], 假设要改变c[3]-c[5]间的区域,只需要把c[3]改变一次(它后面的点全都随之改变一次), 然后再将c

2011-08-09 15:31:30 556

原创 POJ 1195 二维树状数组

题意:给定一个坐标系,每个点有一个值,值可以改变,求任意矩形所围的值得大小。#include using namespace std;#define S 1025int c[S][S], n;int lowbit ( int x ){ return x & ( -x );}void modify ( int x, int y, int v ){

2011-08-09 10:29:50 499

转载 树状数组

摘自:http://www.cnblogs.com/yykkciwei/archive/2009/05/08/1452889.html树状数组先废话一下.嗯 嗯  从今天开始 从基础一步一步开始 追逐我的梦想!今天先来讨论一下树状数组.问题提出

2011-08-09 09:02:04 353

C++ STL 标准模板库

ACMer必备.内容非常详尽,不过是英文版的额。

2012-07-24

空空如也

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

TA关注的人

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