自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于2-SAT的一些总结

<br />2-SAT:<br />二选一时进行联想。<br />多和二分答案联系。<br />可以用来解一些含不等号的不等式。<br />(而含等号的不等式则可以用差分约束系统来解。)<br /> <br />2-SAT就是给你一组变量,变量的取值只有01(或者其它的)两种,变量之间有一些不兼容的关系,问你如何给变量赋一组值使得满足这些条件。<br />可能会有判断是否有解的情况,这样就只需要求强连通然后判断一组的两个是否在同一分量里。<br />而另一种则是需要输出解,那么则需要建立反拓扑序然后染色。<

2010-11-15 15:02:00 619

转载 [zZ]常见递推关系解法

常见递推关系解法1.  a[n+1]=a[n]+f(n)  ->  a[n]=a[1]+sum(f(k) |1<=k<n)<br />移项后叠加:a[n]=a[1]+sum(f(k) |1<=k<n)<br /><br />2.a[n+1]=a[n]*f(n)  ->  a[n]=a[1]*mul(f(k) | 1<=k<n)<br />移项后叠乘:a[n]=a[1]*mul(f(k) | 1<=k<n)<br /><br />3.a[n+1]=p*a[n]+q  ->  a[n]=a[1] + (a[2]

2010-11-14 11:50:00 786

原创 pku 1848 树形DP

<br />这题就是麻烦点儿。细节比较多吧。其余没什么很天马行空的思维。<br />可能单纯给你这道题,让你看出是树形DP的话不太容易吧。<br />看上去很不好入手的一道题,但其实并不是很难做。只要想到了是树形DP。怎么说呢,这就是要学习找突破口吧。国内的赛题毕竟不如UVA或者TC之类的,学长的话说是你找不到模型的。很考想法的那种。所以说多积累一些模型还是比较有利于赛时联想然后迅速找突破口的。<br />对于某个节点来说,我们考虑它所在的那棵树。这个点可能和它的儿子组成一些环,也可能不跟它儿子组而余外留下

2010-11-11 11:32:00 967

原创 pku 3017 单调队列优化DP

<br />首先是方程。很容易看出来。dp[i] = min(dp[j]+maxsum[j+1][i])。然后这个n^2的方程就必须要优化。<br />其实看。对于第i个数来说,它所在段的左边界是单调不减的。那么这个就比较类似单调队列了。<br />还有一点经验。我发现如果dp[i]的子问题如果是类似本题的好多个dp[j]的话就可以考虑用单调队列来优化。<br />开始我想的是,每算出一个状态来就把dp[i]放进队列里。那么要删哪些呢?显然,由于长度i是递增的,那么i一定大于前面入队的长度。对于其后状态的影

2010-11-10 09:16:00 2091

原创 pku 1821神奇DP

<br />废话不多说。dp方程很好写,dp[i][j]=max(dp[i-1][k]+cost[i]*(j-k))。当然也可以省略一维节省内存。然后这个N*K*N的算法必然TLE所以说要想优化。开始想的单调队列优化啊但是总想不清楚那个实现的过程。也想过要倒着枚举j,但是立即想到这前的k还没算出来呢。所以说被自己给否了。其实仔细想想就好了。对于第i个worker来说,它能够达到的最右边界是worker[i].s+worker[i].l-1。那么对于这个状态,它只能从dp[woker[i].s-1]这个状态转

2010-11-08 09:31:00 593

转载 Something About Catalan数(由pku2084延伸出的)

<br />我并不关心其解是怎么求出来的,我只想知道怎么用catalan数分析问题。<br />我总结了一下,最典型的三类应用:(实质上却都一样,无非是递归等式的应用,就看你能不能分解问题写出递归式了)<br />1.括号化问题。<br />矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种)<br /><br />2.出栈次序问题。<br />一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈

2010-11-04 20:34:00 376

原创 TopCoder East China College Tour Round 1 Div 1 1000Points

<br />啊。原来DP还能这么用。这也叫DP啊=。=(汗<br />开始学长推荐的时候说是DP我就在想这方程怎么凑。不过越想越不靠谱。3个未知量啊,难道要我DP三次?<br />恐怕要枚举吧。这样想着。枚举2个变量然后对第三个变量DP。但是仍旧写不出方程。<br />然后想一下,在两个变量确定了之后能够确定什么。对了,ps*a[i][1]+pb*a[i][2]是可以确定的。所以说我可以设k[i] = ps*a[i][1]+pb*a[i][2]。那么实际上我可以通过k[0]+a[0][0]*pg>=k[i]

2010-11-03 13:36:00 694

原创 TCO10 whildcard 250points解题报告

<br />学长推荐的。。。。。。<br />看了Ratio首先赞扬一下自己的勇气。。(汗<br />怎么说呢,其实应该一眼看出来的。2000*2000的数据规模,求一共有多少种方案。应该很明显是n^2的DP。<br />方程怎么写呢。<br />开始是想到,可以省略掉中间过程,直接看某个数在M次操作后的位置。但是写不出方程来。思路不够清晰条理吧。<br />好吧。既然是n^2的DP那么就不管三七二十一,一上来直接dp[i][j]表示前i个数j次操作后的方案数。<br />自己想的是,dp[i][j] =

2010-11-01 16:22:00 651

原创 TC SRM474 500points

<br />先求出最短路。本来以为是d[j] == sum(d[i])或者d[j]== mul(d[i])之类的式子。不过后来发现既然是独立的那么就直接把每个点的最短路条数乘起来就行了……这也叫DP?(额-。=<br />然后就是vector的使用。以前总找借口说不想学,不过现在是时候学起来了。其实也没想象中的那么难用,只要愿意去学。<br />#include <vector><br />#include <list><br />#include <map><br />#include <set><br

2010-10-31 12:12:00 438

转载 C++中的vector使用范例

<br />前几天一个同学问我c++里面的vector的使用,我研究了一下,先总结如下:<br />1.vector 的数据的存入和输出:<br />#include<stdio.h><br />#include<vector><br />#include <iostream><br />using namespace std;<br />void main()<br />{<br />   int i = 0;<br />    vector<int> v;<br />    for( i = 0; i

2010-10-31 11:27:00 468

原创 BOJ1665-BOJ1671+BOJ1044贪心+DP专题(更新中)

<br />1.BOJ1665<br />裸的背包啊。但是呢,如果不先按x排好序的话后面的就加不上啦!原来的背包只是看容积的!但是现在不是容积符合就可以的啦!<br />#include<iostream><br />#include<cstdio><br />#include<cstring><br />#include<algorithm><br />using namespace std;<br />int n,l,b;<br />struct node<br />{<br />    int x,w

2010-10-30 22:17:00 450

原创 ZJU3161

<br />学长推荐的一题。他说是水题啊唉。。可是自己想了好久,还是没有想清楚DP的过程。<br />首先因为是想让删掉的人尽可能少所以头儿会先把差的大于一的说出来。开始竟然想起了二分匹配,我真是被网络流虐了。<br />排完了序之后就想到了实际上考察每个整数点就好,不必去想是哪一组。这样可以联想到记忆化搜但同时也使我后面陷入了一个误区。<br />本来该踢的踢掉以后还剩下500*500的状态觉得记忆化搜是可以,但是又觉得比较麻烦。<br />然后又开始想干脆直接贪吧。为什么会出现最小值最大的情况呢?因为他

2010-10-30 15:40:00 609

空空如也

空空如也

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

TA关注的人

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