自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Neutralzz的博客

我有自己的梦想和追求!

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

原创 Light OJ 1032 Fast Bit Calculations(数位DP)

A bit is a binary digit, taking a logical value of either 1 or 0 (also referred to as "true" or "false" respectively). And every decimal number has a binary representation which is actually a series

2016-02-02 16:28:02 270

原创 Light OJ 1031 Easy Game (区间DP)

经典DP题意不多说。思路:dp[0][i][j]为区间[i,j]内先手的最大分数,dp[1][i][j]为区间[i,j]内后手的最大分数。递推方程见代码。[code]:#include#include#includeusing namespace std;int n,a[105],dp[2][105][105];int main(){ int i,j,k,c

2016-02-02 15:08:23 284

转载 Light OJ 1027 A Dangerous Maze (概率题)

转自:http://blog.csdn.net/danceonly/article/details/16824745解析:定义一次选择选择到Xi是整数的概率为P1,选择到负数的概率是P2,然后选择了正数后平均在T1时间后出去, 选择了负数后平均在T2时间后回到原地。接着设出去的期望是Y,那么可以写出一个式子 :Y = P1 * T1 + P2 * (T2 + Y), 这样的话问题就得到了解决,

2016-02-02 14:28:39 366

原创 Light OJ 1025 The Specials Menu (区间DP)

题意:给你一个字符串,求通过删除几个字符后形成回文串的方案数。解析:dp[i][j] = 第i个字符到第j个字符的方案数s[i]=s[j] :dp[i][j] = dp[i+1][j]+dp[i][j-1]s[i]!=s[j] :dp[i][j] = dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1][code]:#include#include#incl

2016-02-01 22:51:40 332

原创 Light OJ 1021 Painful Bases (状压DP)

题意:给你一个base进制的数,求这个数各个位的所有排列形成的数能被k整除的个数。解析:一上来往数位DP上想去了,一看数据发觉不对,才反映到是状压DP。将各个位的使用用二进制表示为状态S。dp[S][t]为状态S下所有的数mod k = t的个数则递推方程为 dp[S|(1[code]:#include#include#includeusing name

2016-02-01 22:08:22 229

原创 Light OJ 1017 Brush (III) (dp)

题意:平面有n个点,一次操作能去除x轴方向上宽度为w(x解析:简单DP将点按照y坐标排序,dp[k][i]为对前i个点k次操作的最大值,且第k次清除 a[i]-w递推方程见代码。#include#include#includeusing namespace std;int n,w,m,a[105];int dp[105][105];int main(){ i

2016-02-01 15:47:20 291

原创 Light OJ 1013 Love Calculator (dp)

好久没写博客了……(这个习惯没有坚持住……感觉自己实力下滑好快额题意:给你两个字符串,求最短字符串的长度和个数,使得两个字符串是这个字符串的子串。解析:设两个字符串 A、B,长度为n、m。最短长度显然就是 n+m-lcs(A,B)。令f[i][j]为A的前i个字符和B的前j个字符组成的最短长度,dp[i][j]为个数若A[i]=A[j],f[i][j] =

2016-02-01 15:00:59 434

原创 Codeforces 577B Modulo Sum 鸽巢原理

题意略。解析:把取模后的结果0...m-1看为盒子。当n>m时,根据鸽巢原理,至少有一个盒子里有两个以上的球,结果必然是YES。当n代码:#include#includeusing namespace std;typedef long long LL;int n,m,a,b[1005],c[1005];int main(){ int i,j; sca

2015-09-20 10:38:47 439

原创 CodeForces 578C Weakness and Poorness 二分

题意:确定一个x使序列a1-x,a2-x,...,an-x的weakness最小,输出最小weakness。(weakness是连续子序列的和的绝对值的最小值)解法:以前对二分的理解就是二分答案,上下界分别在目标解的两侧,其中一个满足一个不满足。这个题值得自己反思了。正解二分X,目标情况的X值应该是这段序列的连续子序列的最大值和最小值的和逼近0。代码:#include#i

2015-09-19 22:29:30 372

原创 POJ 2991 Crane (线段树)

关键点:向量(a,b)逆时针旋转p度后为(acosp-bsinp,asinp+bcosp)每段看成一个向量,最后结果为向量和。这样记录每段向量的两个值,和与y轴的夹角。prv[i]表示i和i+1的夹角。代码:#include#include#include#include#include#include#define lson l ,m ,rt<<1#d

2015-08-10 13:40:35 285

原创 HDU 4533 威威猫系列故事――晒被子 (线段树)

覆盖是分为两种的,从max(a1,b1)~min(a2,b2)和从min(a2,b2)~max(a2,b2)的覆盖。所以记录两种覆盖方式对应的区间面积值。如下图,对于第一部分的覆盖,假设有两个矩形的右上顶点分别是(a,a),(b,b)对于第一部分的覆盖,面积为(b-x1)*(b-y1) - (a-x1)*(a-y1) = (b^2 - (x1+y1)*b) - (a^2 - (x1+y

2015-08-10 13:30:55 1154

原创 HDU 2871 Memory Control (线段树神题)

神题。。综合了线段树的所有操作,很锻炼代码能力。初状态全为0ls,ms,rs记录区间连续的0,lv,rv记录其所属block的左右端点,c为其懒标记,cnt记录区间的block数,clr记录是否重置。代码:#include#include#include#define lson l , m , rt<<1#define rson m+1,r , rt<<1|1

2015-08-10 12:59:56 325

原创 HDU 3397 Sequence operation (线段树区间合并入门)

维护8个数组,区间和,区间连续1和0的最多的范围,左区间最多连续1和0的范围,右区间最多连续1和0的范围,和一个懒标记数组c[],-2为全0,-1为全1,1为互换(就是^1)。代码:#include#include#include#include#define lson l, m , rt<<1#define rson m+1,r, rt<<1|1using na

2015-08-10 12:50:13 246

原创 ZOJ 3299 Fall the Brick (线段树)

思路:先离散化,对每个board从高到低排序,依次求每个board对应区间的brick数,求出后对应区间清零。这题卡内存,AC好不容易啊!!#include#include#include#include#include#include#define lson l ,m ,rt<<1#define rson m+1 ,r ,rt<<1|1using nam

2015-08-10 12:35:31 253

原创 HDU 1394 Minimum Inversion Number (BIT入门)

树状数组求序列逆序数略。关键是求出每次改变后的序列的逆序数。对于序列ai,...an,a1,...,ai-1变成ai+1,...an,a1,...ai,原先比ai小的数都是逆序数,比ai大的数不是逆序数现在恰好相反,所以结果就加上(n-ai)-(ai-1)代码:#include#include#include#include#define lowbit(k

2015-08-10 12:27:18 257

原创 Codeforces 567E President and Roads (最短路 好题)

题意:给你一个有向图和起终点s,t,问对于每一条边,1.是不是一定在s-t的最短路径上,如果是,输出“YES”2.如果不是,将边权减少多少,能让它一定在最短路径上,边权必须大于0,如果可以,输出‘CAN’ 并输出前后的边权差3.如果不能,输出‘NO’思路还是很简单的,从s和t做两次dijstra求出最短路dis[0][v],dis[1][v],在过程中同时记录下从起点到该点

2015-08-10 12:14:09 644

转载 HDU 4283 You Are the One (区间DP)

自己功夫不到家,这个题根本没想到用区间DP。下面说一下自己做DP的一点点感悟:虽然DP有区间、数位、树形等,但在推状态转移方程时主要还是两个方法:正推和逆推。在正推和逆推的过程中,状态就有可能出来,对应的也会想到它是一个什么DP。不过枚举DP的类型可能也是个做法。。。在推导过程中,要确定满足最优子结构的目标状态是怎样的,写出方程后还要看其是否满足无后效性。最重要的还是要多做题积累经

2015-08-02 00:56:40 254

原创 HDU 4521 小明系列问题――小明序列 (DP)

这个题解法花样,这里说单纯DP的做法。根据题意很容易想到最长递增子序列,回顾nlogn的二分做法。dp[i]为长度为i+1的子序列的末尾元素的最小值。每加入a[i]时对应的值就是以a[i]结尾的最大长度。假设b[i]为以a[i]结尾的最大长度,dp[]中已经加入了a[0]....a[i-d-1],那么b[i] = lower_bound(dp,dp+maxn,a[i])-dp+1。

2015-07-31 23:18:48 365

原创 POJ 1180 Batch Scheduling (斜率优化DP)

这题看了题解一句话恍然大悟!!!如果从前往后推的话dp方程是有后效性的,但是从后往前考虑第i个对最后结果的贡献,其为处理第i个所用的时间再乘上从第i个开始到最后的f的和。所以设t[i]为从1到i的t的和,f[i]为1到i的f的和方程为dp[i] = min(dp[i],dp[j] + (m+t[j-1]-t[i-1])*(f[n]-f[i-1]))。用斜率优化,注意这个凹折线是从后

2015-07-30 20:26:18 359

原创 UVA 12594 Naming Babies (斜率优化DP)

思路:设dp[i][j] 为将前j个字符分成i段的最小值。a[i]为第i个字符在原始字符串的位置。那么dp[i][j] = min(dp[i][j],dp[i-1][k]+0*a[k+1]+1*a[k+2] + ...... + (j-k+1)*a[j] - a[k+1]^2 - ...... - a[j]^2)原始等价于k*a[k+1]+(k+1)*a[k+2] + ...... + (

2015-07-30 20:07:34 275

原创 POJ 3709 K-Anonymous Sequence (斜率优化DP)

思路:设dp[i]为考虑前i个数字的最小花费。那么dp[i] = min(dp[i],dp[j] + s[j] - s[i] - (j-i)*a[j+1])。注意初值和状态转移的初始位置。我的代码:#include#include#includeusing namespace std;typedef long long LL;const int maxn = 5

2015-07-30 19:45:26 482

原创 POJ 2018 Best Cow Fences (斜率优化入门)

论文题。自行搜索《浅谈数形结合在信息学竞赛中的应用》我的代码:#include#include#include#includeusing namespace std;typedef long long LL;const int maxn = 100005;LL n,m,a[maxn],s[maxn];LL q[maxn],hd,tl;LL getY(LL j

2015-07-30 19:41:19 537

原创 POJ 1160 Post Office (水DP)

思路:设dp[i][j]为前j个地方放i个邮局且第i个放在地方j上的最小距离和。那么dp[i][j] = min(dp[i][j],dp[i-1][k] +w(k,j)) (w(k,j)为区间k到j的最小距离和)这里可以用四边形不等式优化。我的代码:#include#include#include#includeusing namespace std;const

2015-07-30 19:39:14 274

原创 HDU 3516 Tree Construction (dp+四边形不等式优化)

这题是个区间DP。。当时根本没想到。。。设dp[i][j]为将区间i到j内的所有节点连接的最短边权和。那么这棵树肯定是有两子树构成。方程便为:dp[i][j] = min(dp[i][j],dp[i][k] + dp[k+1][j] + dis(i,j))。然后用四边形不等式。我的代码:#include#include#include#include#inclu

2015-07-30 11:45:24 548

原创 HDU 3045 Picnic Cows (斜率优化DP)

思路:设dp[i]为考虑前i个cows的最小值。s[i] 为从第1个到第i个的moos和。那么方程为dp[i] = min(dp[i],dp[j] + s[i] - s[j] - (i - j)*a[j+1])。然后斜率优化将复杂度降为O(n)。这个题!!!一定要注意初值!!!一定要注意状态从什么地方开始转移!!!以后的所有DP题也是!!!我的代码:#inclu

2015-07-30 11:39:04 280

原创 HDU 3669 Cross the Wall (斜率优化DP)

先将各矩形按照w从小到大排序。设dp[i]为考虑前i个矩形的总的最小面积。dp[i] = min(dp[i], dp[j] + h[k]*w[i]) k为从j+1到i的高度最大的矩形。那么这样复杂度n^3必然T。考虑这样一个事实:将矩形排序后,考虑第i个矩形,前i-1个矩形中高度比它小的必然可以被包含于第i个矩形,我们只需要考虑排序后矩形中高度降序的矩形。那么方程就变为dp[i

2015-07-30 11:30:47 256

原创 HDU 2993 MAX Average Problem (斜率优化)

论文上的题,不懂自行搜索周源论文《浅谈数形结合思想在信息学竞赛中的应用》这个题单独scanf读数据就超时,已经没法AC了,自己会了就行。代码:#include#include#include#include#includeusing namespace std;const int MAXN=100010;double sum[MAXN];int a[MAXN];

2015-07-30 10:51:04 224

原创 HDU 1300 POJ 1260 Pearls (DP)

思路:设dp[i]为考虑前i个珍珠的最小花费。那么枚举用第i个珍珠所代替的珍珠(其所替换的必定是一段连续的区间)得到方程dp[i] = min(dp[i],dp[j] + cost(j+1,i))。这个题可以用斜率优化来降低复杂度。我的代码:#include#include#includeusing namespace std;const int maxn = 5

2015-07-30 10:46:19 291

原创 HDU 4528 小明系列故事――捉迷藏 (很好的BFS)

在用BFS的时候可访问的点要用四个状态去记录,0代表一个都没找到,1代表找到了大明,2代表找到了二明,3代表都找到。因为在BFS的过程中访问各节点时,因为访问时的状态不同,所以过程中包含有回路。我的代码:#include#include#include#includeusing namespace std;const int maxn = 105;struct

2015-07-30 10:39:29 682

原创 HDU 2829 Lawrence (斜率优化DP)

题意:炸铁路,每段连通的铁路的价值为两个直接或间接相连的点对的权值积的和,求炸m次的最小总价值。思路:设dp[i][j]为炸i次,考虑前j个站点的总价值。那么方程为dp[i][j] = min(dp[i][j],dp[i-1][k] + val(k+1,j))。val(k+1,j)的值为k+1到j的各项权值的 和的平方 减去 平方的和 后再除以2。然后就可以写出斜率形式。

2015-07-30 10:33:17 277

原创 HDU 3507 Print Article (斜率优化DP)

题意:一篇文章打印成多行,每行可以有任意数目个字符,打印成一行的代价为sigma(ci)^2+m,求总的最小代价。思路:设dp[i]为考虑前i个字符的最小代价,s[i]为从第1个字符到第i个字符的代价和。那么枚举与第i个字符同行的字符个数得方程:dp[i] = min(dp[i] , dp[j] + (s[i] - s[j])^2 + m)。然后斜率优化复杂度降到O(n)。斜率DP

2015-07-30 10:23:26 300

原创 HDU 5294 Tricks Device (最短路变体) 2015多校联合第一场

第二个答案很好求,求出最短路进过的最少的边数 和总数作差就是了。关键是第一问,我的做法是记录最短路的所有路径,然后从终点出发,开始搜索,经过的边进行标记,标记了的边不能再访问,如果能到达起点,结果+1。我的代码:#include#include#include#include#include#includeusing namespace std;typedef

2015-07-23 19:20:24 302

原创 HDU 5305 Friends (搜索+剪枝) 2015多校联合第二场

开始对点搜索,直接写乱了,想了想对边搜索,虽然复杂度高,剪枝一下水过去了。代码:#include#include#include#includeusing namespace std;struct Edge{ int a,b;}G[35];int n,m,deg[10],on[10],off[10];int res;void init(){ mem

2015-07-23 19:11:46 510

原创 HDU 5303 Delicious Apples (DP) 2015多校联合第二场

题意:一个环上有n个苹果树,每个树上有ai个苹果,你有一个容量为k的篮子,装满苹果后要回到起点清空篮子,问你从起点出发,摘完所有苹果所走的最短路程。思路:最后的结果肯定是顺时针取一定的苹果所走的最短路与逆时针走的最短路的和。那么设dp[2][i],0代表顺时针,1代表逆时针,i代表取的苹果数,值为取完i个苹果回到原点的最短路程。position[i]为第i个苹果所在的位置。以顺时针为例

2015-07-23 19:08:09 945

原创 SPOJ BALNUM (数位DP+状压)

用两个状态S,KS中第i位为1,说明出现了奇数次,为0说明出现偶数次。K中第i位为1,说明数字i出现过,为0说明没出现。复杂度10的7次方。。。120ms跑过。。。正解应该是用三进制把两个状态合并。我的代码:#include#include#include#includeusing namespace std;typedef unsigned l

2015-07-22 16:16:17 300

原创 HDU 3652 B-number (简单数位DP)

dp[i][s][k] k为模13的余数。s=0,不存在;s=1,不存在,上一位为1;s=2,存在。我的代码:#include#include#include#includeusing namespace std;int n,dp[12][15][3];int bit[12],top;int get_newk(int k,int d){ if

2015-07-22 16:09:48 316

原创 HDU 3709 Balanced Number (简单数位DP)

枚举中间位置,注意前导0。我的代码:#include#include#include#include#include#includeusing namespace std;typedef long long LL;LL dp[20][20][2000],l,r;LL bit[20],top;LL dfs(LL i,LL k,LL s,bool e,bool z){

2015-07-22 15:54:45 229

原创 POJ 3252 Round Numbers (简单数位DP)

记录0和1的个数就好代码:#include#include#include#includeusing namespace std;typedef __int64 LL;LL dp[50][50][50],l,r;LL bit[50],top;LL dfs(int i,int s,int k,bool e,bool z){ if(i == -1) return

2015-07-22 15:50:24 208

原创 HDU 3555 Bomb (简单数位DP)

同上,dp[i][0] 不存在,dp[i][1] 不存在,且上一位为4,dp[i][2] 存在代码:#include#include#include#includeusing namespace std;typedef __int64 LL;LL dp[20][3],l,r;LL bit[20],top;int get_news(int s,int d){

2015-07-22 15:47:01 202

原创 HDU 2089 不要62 (简单数位DP)

dp[i][0] 不存在dp[i][1]不存在,上一位为6dp[i][2] 存在代码:#include#include#include#includeusing namespace std;typedef __int64 LL;LL dp[20][3],l,r;LL bit[20],top;int get_news(int s,int d){

2015-07-22 15:42:22 218

空空如也

空空如也

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

TA关注的人

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