2011年8月5日

图论——欧拉回路/欧拉路径

摘要: pku1780:给定长度n,要求给出一个最短的字符串,这个字符串包含所有的由0~9组成的长度为n的子串。如果有多个,那么选择字典序最小的一个。解法:欧拉回路。这算是一个经典问题吧,将所有可能形成的字符串看成图中的边,假如一条边是12345,那么他的两个顶点分别为1234/2345。。就这样建图然后求欧拉回路就可以了。注意不要使用递归,会爆掉堆栈。。。改成回溯写法就好了。用了一下goto语句,感觉goto在这种模拟递归栈的程序中挺好用的。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <c 阅读全文

posted @ 2011-08-05 19:40 Moon_1st 阅读(607) 评论(0) 推荐(0) 编辑

2011年8月3日

数论问题精选

摘要: pku2689:题目大意:给定区间[l,r],求[l,r]中距离最近的素数对和距离最远的素数对,如果存在tie,那么输出第一对。解法: 如果l和r都比较小的话,我们可以使用筛法,但是这个题目的l和r都非常大,所以直接的筛法会TLE并且MLE。注意到题目要求是r-l<=10^6,并且l<r<2,147,483,647。想一想筛法的过程——对于素数i,它开始筛的位置是i*i,小于i*i的位置是没有必要再去筛的,不是素数的肯定都被筛过了。所以对于l,r,我们只需要利用小于等于sqrt(r)的素数去筛[l,r]这个区间中的数即可。由于r-l<=10^6,可以开个长度为10^6的 阅读全文

posted @ 2011-08-03 14:41 Moon_1st 阅读(541) 评论(0) 推荐(0) 编辑

2011年8月2日

DP优化——四边形不等式(实例)

摘要: hdu2829:dp方程:f[m][n] = Min{f[m-1][k]+w[k+1][n]}。令w[i][j](i<=j)表示(a[i]*a[i+1]+a[i]*a[i+2]+....+a[i]*a[j])+(a[i+1]*a[i+2]+a[i+1]=a[i+3]+....)+....+a[j-1]*a[j]——(1)则(1)式可以表示为[(a[i]+a[i+1]+...+a[j])*(a[i]+a[i+1]+...+a[j])-a[i]^2-a[i+1]^2-....-a[j]^2] / 2即(1) = [(sum1[j]-sum1[i-1])^2-(sum2[j]-sum2[i-1 阅读全文

posted @ 2011-08-02 17:25 Moon_1st 阅读(1662) 评论(0) 推荐(0) 编辑

DP优化——四边形不等式(简介)

摘要: 今天学习了一下四边形不等式,这个东西很早以前就看过,但是始终觉得很难,因为对于题目来说去证明的话总觉得有些麻烦撒~今早看了看,把由w(i,j)满足四边形不等式能推出m(i,j)也满足四边形不等式的那一部分看明白了。决策单调性(也就是s(i,j)那一部分)没找的好的证明,便记住结论了。个人感觉黑书上对于四边形不等式的讲解性价比还是比较高的,讲的都是重点,很好。引用一下:当函数w(i,j)满足 w(a,c)+w(b,d) <= w(b,c)+w(a,d) 且a<=b< c <=d 时,我们称w(i,j)满足四边形不等式。。当函数w(i, j)满足w(i', j) & 阅读全文

posted @ 2011-08-02 17:05 Moon_1st 阅读(13886) 评论(1) 推荐(3) 编辑

2011年8月1日

DP——斜率优化专题(pku3709,hdu3669)

摘要: pku3709:这是我从我的百度空间搬过来的一篇文章,百度空间发出来的代码太难看了,打算专业一些的内容还是放在这个blog上吧。这是我第一次 “挣了八景” 的做斜率优化的题,以前多数时候都是撇几眼~~还有那个四边形不等式,不过该干的事早晚是得干啊~~实际上斜率优化一点都不难,关键是理解了斜率不等式以及单调队列队尾的更新。此题很容易得到O(n^2)的DP方程:f[i]=Min{f[j]+sum[i]-sum[j]-a[j+1]*(i-j)}。然后我说一下斜率优化:假设决策j1<j2并且j2优于(或者不差于)j1,那么f[j1]+sum[i]-sum[j1]+a[j1+1]*(i-j1) & 阅读全文

posted @ 2011-08-01 21:47 Moon_1st 阅读(2033) 评论(0) 推荐(1) 编辑

导航