
技巧
文章平均质量分 71
byijie
这个作者很懒,什么都没留下…
展开
-
异或的性质及运用
异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0。简单理解就是不进位加法,如1+1=0,,0+0=0,1+0=1。性质1、交换律2、结合律(即(a^b)^c == a^(b^c))3、对于任何数x,都有x^x=0,x^0=转载 2012-11-17 22:43:25 · 860 阅读 · 1 评论 -
最大M子段和 辅助数组降低时间复杂度
http://www.cppblog.com/sdfond/archive/2009/06/19/88083.html最大M子段和 给定n个数求这n个数划分成互不相交的m段的最大m子段和。 经典的动态规划优化的问题。设f(i, j)表示前i个数划分成j段,且包括第i个数的最大m子段和,那么有dp方程: f(i, j) = max { f(i - 1, j) + v[i转载 2013-07-16 19:09:15 · 1004 阅读 · 1 评论 -
hdu4312 Meeting point-2
将切比雪夫距离转换成曼哈顿距离利用这个转换可以去掉讨厌的最值函数,挺不错的。max(|x1-x2|,|y1-y2|)=(|x1-x2+y1-y2|+|x1-x2-y1+y2|)/2 。这个转换的几何意义是,把每个点逆时针旋转45度,然后坐标乘以根号2后得到的点的曼哈顿距离等于原来点的切比雪夫距离。(可以用极坐标理解)也可以想做是顺时针将坐标轴旋转了45度。 #include原创 2013-07-06 18:16:00 · 1335 阅读 · 0 评论 -
八数码问题
对于给定八数码棋局的初始状态,我们的目标是通过交换空格与其相邻棋子使棋盘达到目标状态。其中,游戏规则是只能交换空格与其上下左右四个方向的相邻棋子。假设棋局目标状态为如下形式:(A、B、C、D、E、F、G、H表示棋子)A B CD E FG H 而初始状态就是A、B、C、D、E、F、G、H这八个棋子在这九个棋格上的任意分布。并且我们对棋转载 2013-05-20 23:14:53 · 1149 阅读 · 0 评论 -
hdu1542 线段树 矩形面积并
这题和poj2482还有“蛇”那题差不多,也是二维转一维,存活时间(时间点思想)。另外通过做这题发现一个这类题的一个特点,就是每次的删除操作肯定是删除之间已经插入的一些线段,这样我们发现这类线段树和之间写的线段树有些许不同,更加像"线段树",每次更新这颗"线段树"里的一些线段(节点),并作一些统计,是用不到PushDown操作的。#include#include#include#incl原创 2013-04-04 23:34:24 · 779 阅读 · 0 评论 -
POJ2482 Stars in Your Window 线段树 二维转换一维 STL
解题思路: 首先注意到最优解肯定是窗子的右上角(或其他角)在某个星星位置处(这里的在是模糊的在,略微比星星的位置大一点,能包含这个星星就行)。这样就将问题变成离散空间上的问题了。然后问题关键就是将二维问题变成一维问题,先只考虑x轴方向的一维,可以想到一个星星的起到的作用是一条长度为w的线段,然后答案就是找到被最多线段覆盖的某点,就是区间最值问题了。那么再考虑y轴这一维,这一维可以认为是线段的存活时原创 2013-04-02 17:17:44 · 921 阅读 · 0 评论 -
hdu 3392 利用滚动数组优化的dp
题意:n个男生,m个女生的身高,把人数较少的一方和另外一方匹配完,求最少的差值。|n-m|思路:排序,然后动态规划,dp[i][j]代表人数少的一方中的i与另外一方的i+j进行匹配,j//#include#include#include#include#includeusing namespace std;double dp[2][105];int n,m;double a原创 2012-12-15 16:21:04 · 833 阅读 · 0 评论 -
hdu 1422 最大子序列和问题的变形,最长非负子序列
#include#includeusing namespace std;int input[200005];int main(){ int n,i,w,l,ans,tmp,tmp2; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;++i) {// cin>>w>>l;原创 2012-12-14 21:12:32 · 915 阅读 · 0 评论 -
hdu 1505&1506&2870&2830
1506呃..题目虽基础,但这个思路挺好,利用栈找出一个区间的左右边界,也就是区间的范围,在这儿记录一下免得以后忘了,还要吐槽下hdu数据不科学..这个思路还能解另一道题,明天敲一下。//原理: 利用栈构造一个非减的序列,一个元素进栈时l[i]则确定了,出栈时r[i]则确定了#include#include#include#includeusing namespace std;原创 2012-12-03 20:07:34 · 603 阅读 · 0 评论 -
hdu4677 Query on Graph 根号n
根号n区间暴力神技。。。#include#include#include#include#include#includeusing namespace std;struct node{ int l,r,id1,id2; bool operator< (const node& a) const { return id1==a.id1?r<a原创 2013-09-06 11:33:23 · 1324 阅读 · 0 评论