自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 hdu 1505 /hdu 1506(最大子矩阵)

题意都是求最大子矩阵和。自己用O(n^3)的算法,直接给我无情的TLE (T..>随后看到了这个位置迭代算法。left[i] 表示在第i号元素的左边从left[i]至i中, elem[j] >= elem[i] ( left[i]同理可得,用right[i]表示在

2011-08-22 19:50:07 1116

原创 hdu 1024 Max Sum Plus Plus(dp && 最大m子段和)

题意是输入m,n。m为你要求的子段个数,n为数据个数。由于是很早的题型了,但是理解起来还是很是无力。并于是用了三天来搞懂此类问题。发现网上大多代码无思路整个过程。就大致讲解一下DP的整个思路。我们可以很清楚地得,这是一个顺序DP,由ix那它

2011-08-19 14:29:43 4307 5

转载 最长非降子序列、非升子序列(问题)

问题大致是给出一组数列,求出数列中最长不降子序列或者最长不升子序列,这里的子序列在原序列中可以不连续。     顾名思义,不降可理解为递增,不升亦可解释为递减。     显而易见,动态规划是一种容易让人想到的算法。以下先用动态规划求取最长递增子序列中的元素个数。

2011-08-17 12:09:25 6909 1

原创 poj 2528 Mayor's posters(区间涂色)

这个题目很多网上的解题报告都是错的,但是交了可以AC。不过我还是仔细检查了一下,最后自己写了二天,很悲剧。第一次是因为最后的查询区间的(1,k) 写成了(1,n)导致一直检查不出错误,但是从过程中又得到的是正确答案。第二次是因为离散化,反正是相当的蛋疼。做线段树已

2011-08-31 16:08:27 550

原创 poj3468 A Simple Problem with Integers

区间求和,区间更新。需要覆盖区间,延迟处理。void PushSub(int rt,int m){ if(color[rt]){ color[rt<<1]+=color[rt]; color[rt<<1|1]+= color[rt]; sum[rt>

2011-08-29 11:04:38 422

原创 hdu 1698 Just a Hook(成段更新)

color标记待更新,更新完标记为0;#include#define M 100005#define mid (l+r)>>1#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int color[M<<2],sum[M

2011-08-27 22:14:45 387

转载 位运算简介及实用技巧(四):实战篇

转自:M67下面分享的是我自己写的三个代码,里面有些题目也是我自己出的。这些代码都是在我的Pascal时代写的,恕不提供C语言了。代码写得并不好,我只是想告诉大家位运算在实战中的应用,包括了搜索和状态压缩DP方面的题目。其实大家可以在网上找到更多用位运算优化的题目,这里整

2011-08-27 11:16:00 523

转载 位运算简介及实用技巧(三):进阶篇(2)

转自:M67今天我们来看两个稍微复杂一点的例子。n皇后问题位运算版    n皇后问题是啥我就不说了吧,学编程的肯定都见过。下面的十多行代码是n皇后问题的一个高效位运算程序,看到过的人都夸它牛。初始时,upperlim:=(1 shl n)-1。主程序调用test(

2011-08-27 11:13:31 932

转载 位运算简介及实用技巧(二):进阶篇(1)

转自:M67博客=====   真正强的东西来了!   =====二进制中的1有奇数个还是偶数个    我们可以用下面的代码来计算一个32位整数的二进制中1的个数的奇偶性,当输入数据的二进制表示里有偶数个数字1时程序输出0,有奇数个则输出1。例如,131452

2011-08-27 11:10:00 556

转载 位运算简介及实用技巧(一):基础篇

转自:http://www.matrix67.com/ 去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章。后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法。从今天起我就开始写这一系列位运

2011-08-27 11:08:37 630

原创 poj 2828 Buy Tickets(线段树)

(图画烂的一逼)按照第一个题例数据来说。从后面开始插,正好能保证它就是在它最后的位置。f表示的是这个区间还剩余多少个空位。插入69时候,直接插在最后位置上,那么后面两个位置减去一。然后更新空位。大致思路就是这样。#include #define M 2

2011-08-26 22:06:02 612

原创 hdu 2795 Billboard(线段树)

代码如下:#include#define mid (l+r)>>1#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define M 200001#define max(a,b) (a)>(b)?(a):(b)#d

2011-08-26 12:19:59 740

原创 hdu 1394 最小逆序数(线段树版本)

从该数字num[i]就可以知道比它小的数有num[i]个,比它大的数有n-1-num[i]个.         每次把num[i]放到最后时,summ = summ – num[i] + n-1-num[i];#include#define Min(a,b)

2011-08-24 21:24:25 607

原创 hdu 1754 (区间最大线段树基础题)

#include#define M 200005#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int Max[M<<2];void Pushdata(int rt){ Max[rt] = Max[rtMax[r

2011-08-24 17:34:16 685

原创 hdu 1166 敌兵布阵(线段树入门题)

#include#include#define M 50005#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int sum[M<<2];void PushPlus(int rt){ sum[rt] = sum

2011-08-24 16:31:32 564

原创 zju/zoj 1136 Multiple(BFS)

就是不停的在后面加数。#include#include#include#include#include#includeusing namespace std;#define M 5002bool use[M];typedef struct li{ str

2011-08-23 16:16:40 878

原创 UVA 10405 Longest Common Subsequence

经典的DP,本来可以开一个二维大数组的。但是由于以前做过,现在再来做。。。直接滚动数组水之(原谅我的无耻、、、)还要注意,用scanf会Wa#include#include#include#includeusing namespace std;#de

2011-08-23 12:18:04 1253

原创 uva 103 (dp)Stacking Boxes

有什么问题可以Emailskyzlxuan@gmail或者直接留言,我都可以收到。其实主要的思路就是用s[],数组保存排序后的数列。最后用最长上升子序列……#include#include#include#includeusing namespace st

2011-08-23 11:53:23 604

原创 poj 1088 (dp记忆化搜索)

#include#define M 105int dp[M][M],a[M][M],n,m,step[8]={0,1,0,-1,1,0,-1,0};int solve(int i,int j){ if(dp[i][j] || i>n || im || j<1)

2011-08-22 21:49:05 517

原创 UVA 111 最长公共子序列(以错乱序号)

#include#include#define M 21int a[M],b[M],n,t;bool count(){ int i=1; while(i<=n && ~scanf("%d",&t)){ b[t]=i;i++; } if(i==n+1)

2011-08-21 20:42:50 635

原创 zju/zoj 1276 Optimal Array Multiplication Sequence(dp)

#include#include#define MIN(a,b) (a)<(b)?(a):(b)#define M 100int position[M][M];void putpath(int i,int j){ if( i>j) return ; if(po

2011-08-21 18:07:47 525

原创 hdu 1983 Kaitou Kid - The Phantom Thief (2) (DFS+BFS)

#include#include#include#includeusing namespace std;//4462706 2011-08-21 13:24:53 Accepted 1983 406MS 400K 1727 B C++ ashione#define N

2011-08-21 13:39:06 726

原创 zju/zoj 1140 Courses

#include#include#includeusing namespace std;#define M 505int n,p,m,a,path[M];bool map[M][M],use[M];void init(){ memset(map,false

2011-08-20 18:43:04 707

原创 zju/zoj 1459 String Distance and Transform Process

最长公共子序列+保存修改路径。表示很无奈得记住了别人的代码,所以……题解出自:http://hi.baidu.com/gugugupan/blog/item/2e0d27e8dd6bf839b80e2df4.html有时间自己会给出自己的理解和更详细的转移步骤。

2011-08-20 15:14:28 1035

原创 hdu 1068 boys and girls(最大独立点集 ,匈牙利算法)

最大独立点集=最小覆盖路径= 顶点数 - 最大二分匹配/2 (!)题意是求最少有几组出去,能匹配则匹配,不能的就是自己单独一组。这个是匈牙利算法,属于模版题。#include #include //using namespace std;#de

2011-08-18 22:14:36 1299 1

原创 zju 1234 Chopsticks (DP)

题解慢慢补充:法一:顺序Dp#include#includeusing namespace std;#define MAX_N 5001#define Min(a,b) (a)<(b)?(a):(b)int dp[2][MAX_N],Dischop[MAX

2011-08-17 18:34:20 819

原创 zju 1003 Crashing Balloon( 鸡吧题)

不会,!!#include #include using namespace std;#define MAX_N 101bool succeedn,succeedm;int n,m;void Divide(int n,int m,int k){

2011-08-16 22:17:59 909

原创 zju 2097 Walking on a Chessboard(二维BFS+一维状态转移)

刚开始用二维BFS做出了,但是一直WA,最后看到还有一维状态,所以加个状态。。。。但是更悲剧的事情也紧接着发生了,我没有定义起点和终点是一样的状态,而且我是用-1定义距离无穷大的。所以,很鸡巴的输出了1改了之后,顺利A 了。。。最后心情有点烦。。。#include

2011-08-16 16:04:31 1096 1

原创 poj 1141 Brackets Sequence(逆序DP)

《算法艺术与信息学竞赛》 P113~P115,注释掉的内容可以求得最少匹配完全数量。path 表示的是在某个中间序列得到了较小的路径序号。#include#include#includeusing namespace std;#define MAX_N 105#

2011-08-16 12:31:04 455

原创 刘汝佳<算法艺术与信息学竞赛>推荐题目——Poj

一.动态规划参考资料:刘汝佳《算法艺术与信息学竞赛》《算法导论》推荐题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1141 简单http://acm.pku.edu.cn/JudgeOnline

2011-08-16 09:32:34 1563

原创 zju 1671 Walking Ant (bfs 暴搜题)

刚开始还在想怎么去判是否已经走过,但是考虑到它主要是以hp在走,而不是算步数(当然BFS保证步数是最少的),当它在循环跑的时候总会把hp消耗完,还有它可以来回吃实物,但是可以想到,吃食物一次而没有出去的话,这一条路就是不可能通的。那么将食物标记为障碍物即可。代码如下:#i

2011-08-15 21:31:16 599

原创 zju 1008 Gnome Tetravex

#include#include#includeusing namespace std;#define MAXNUM 26typedef struct{ int l,r,u,d; // 代表左右上下。}data;data Squres[MAXNUM];int

2011-08-15 18:50:34 911

原创 zju 1499 Increasing Sequences(分步动态规划)

#include#include#includeusing namespace std;#define MAX_N 100#define max(a,b) (a)>(b)?(a):(b)int leftdp[MAX_N],rightdp[MAX_N];char s

2011-08-15 17:40:07 1029

原创 zju 1940 Dungeon Master(三维BFS暴搜题)

刚开始memset(map,'#',sizeof(map));memset(mins,-1,sizeof(map));初始化错了。导致一直WA,草。。。不过改过来以后,瞬间0MS跑过。。。哎,自己还是太弱了,#include#include#includeu

2011-08-15 11:54:27 839

原创 zju 2100 Seeding(dfs暴搜)

感觉这题就像是在判断给你的这个图是不是半欧拉图,判断图G是欧拉图当且仅当G为连通图,且所有点度为偶数。判断图G是半欧拉图当且仅当G为连通图,且当且仅当2个点度数为奇数。欧拉图也是半欧拉图。但是,从里理论上来说,可以做出来,还要用并查集判断是否连接,感觉繁了点,不过

2011-08-14 21:43:37 522

原创 zju 1525 Air Raid(最小路径覆盖)

#include#includeusing namespace std;#define MAX_N 121//有向图最小路径覆盖=|V| - 最大匹配数; 无向图最小路径覆盖=|V| - 最大匹配数/2。bool map[MAX_N][MAX_N],use[MAX_N]

2011-08-14 16:32:45 932 8

原创 hdu 1080 Human Gene Functions(类最长公共子序列)

初始化一定要做好。不然就如此地悲剧,刚开始我还是严格按照最长公子序来写的,比较的时候是满足条件再赋值。谁知道它就是三个一起比较。准备用Map来映射,一直出错,不得不采用如此蹩脚的代码了。最后,还想用滚动数组来写,发现……,不能正确初始化。算了,反正100的

2011-08-14 13:17:49 679

原创 hdu 1513 使用滚动数组的最长公共子序列

#include#includeusing namespace std;#define MAX_N 5002#define MAX(a,b) (a)>(b)?(a):(b)char s[MAX_N],t[MAX_N];int dp[2][MAX_N];int

2011-08-14 12:14:50 839

转载 动态规划解最长公共子序列问题

转自:http://blog.csdn.net/yysdsyl/article/details/4226630动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求

2011-08-14 11:32:41 484

原创 zju 1986 Bridging Signals(最长上升非降子序列)

#includeusing namespace std;#define MAX_N 40001int dp[MAX_N],bridge[MAX_N];int main(){ int T,n,i,j; cin>>T; while(T--){ cin>>n; for(i=1;i<=n;i++) cin>>bridge[i]; dp[1]=bridge[1]; in

2011-08-14 10:35:54 450

空空如也

空空如也

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

TA关注的人

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