摘要:        
CF原题由题可知,n,m太大,无法开出dp[n][m]的数组。观察发现s/e最大为300,也就是说,选用第一种操作的次数不会超过300。于是定义dp[i][j],第一个串的前i个数,使用了j次第一种操作的时候,第二个串最少删了多少个数。转移有两种情况:1.当前位置不删,这时dp[i][j]=dp[i...    
阅读全文
 
        
        posted @ 2014-05-31 20:45
whatbeg
阅读(320)
推荐(0)
        
            
        
        
摘要:        
定义:dp[i][j]为状态为j时,第i行符合条件的状态数转移方程:dp[i][j] += dp[i-1][t] //t为上一行状态,与当前行不冲突。从第一行开始向下枚举,每次枚举当前行的状态和上一行的状态,如果不相邻或者未被地雷占据并且两行的关系是合法的,则加上方法数。最后res = SUM(d...    
阅读全文
 
        
        posted @ 2014-05-31 20:44
whatbeg
阅读(288)
推荐(0)
        
            
        
        
摘要:        
LRJ黑书上的例题。化简均方差公式:均值的平方一定,所以只需让矩形的总分的平方和最小即可。定义:dp[k][x1][y1][x2][y2],以(x1,y1)为左上角坐标,(x2,y2)为右下角坐标的矩形,切割K次以后得到的k+1块举行的总分平方和的最小值转移方程:(分成横割和竖割)dp[k][x1]...    
阅读全文
 
        
        posted @ 2014-05-31 20:43
whatbeg
阅读(349)
推荐(0)
        
            
        
        
摘要:        
定义dp[i][j]表示第i天手中有j股股票时,获得的最多钱数。转移方程有:1.当天不买也不卖: dp[i][j]=dp[i-1][j];2.当天买了j-k股: dp[i][j]=max(dp[r][k]+(j-k)*Ap[i]); (r=1,所以i>w+1时才能转移,这是i#include #in...    
阅读全文
 
        
        posted @ 2014-05-31 20:42
whatbeg
阅读(411)
推荐(0)
        
            
        
        
摘要:        
设FA为A的牌中数字异或和,FB为B的。则有性质:ans = (所有的(A&B=0)个数 + (FA=FB且A&B=0)的个数)/2。即所有的FA>FB的个数(除2是因为这里FA>FB的个数等于FA#include #include #include #include using namespace...    
阅读全文
 
        
        posted @ 2014-05-31 20:41
whatbeg
阅读(419)
推荐(0)
        
            
        
        
摘要:        
题意:即求给定n个数字(a1,a2,……an),不改变序列,分成M份,使每一份和的乘积最大。思路:dp[i][j]表示把前i个数字,分成j份所能得到的最大乘积。转移方程:dp[i][j] = max{ dp[k][i-1]*sum(k+1,j) } 其中显然j#include #include #i...    
阅读全文
 
        
        posted @ 2014-05-31 20:40
whatbeg
阅读(318)
推荐(0)
        
            
        
        
摘要:        
A.爱管闲事http://www.cnblogs.com/whatbeg/p/3762733.htmlB.轻音乐同好会C.温泉旅馆http://www.cnblogs.com/whatbeg/p/3762735.htmlD.摩天轮E.生日礼物http://www.cnblogs.com/whatbe...    
阅读全文
 
        
        posted @ 2014-05-31 19:21
whatbeg
阅读(233)
推荐(0)
        
 
		
    
        
        
摘要:        
B.Battle for Silver定理:完全图Kn是平面图当且仅当顶点数n#include #include #include #include using namespace std;#define N 100000000int mp[500][500];int w[500];int main...    
阅读全文
 
        
        posted @ 2014-05-25 22:23
whatbeg
阅读(256)
推荐(0)
        
 
		
    
        
        
摘要:        
这种有限制的类棋盘着色问题一般可以用指数型母函数来解决,设Hn表示这样的着色数,首先H0=1,则Hn等于四个字母的(A,B,C,D)的多重集合的n排列数,其中每个字母的重数是无穷,且要求A,C出现的次数是偶数,因此,H0,H1,...Hn,...的指数生成函数是A,B,C,D因子的乘积: 用快速幂解    
阅读全文
 
        
        posted @ 2014-05-15 00:13
whatbeg
阅读(293)
推荐(0)
        
 
		
    
        
        
摘要:        
题意:给n种房子,每种房子有一个值val和个数cnt,现在要把这些房子分成两部分,争取两部分总值相等,如果不能相等,让A>B,且A-B最小。 解法:先跑一次生成函数,c[n]表示组成总值为n的方法种数,然后从Total/2~0枚举B的总值,如果c[i]不为0,说明可以达到 i 这个状态,说明这就是B    
阅读全文
 
        
        posted @ 2014-05-14 21:47
whatbeg
阅读(224)
推荐(0)
        
            
        
        
摘要:        
这题跟上两题也差不多。 把150以内的素数找出来,把素数的值看做硬币的面值,每个硬币的个数即ceil(150/prime[i]),因为再多也没用,最多组成n=150就行了,所以又回到了找硬币问题。用生成函数解之。 代码: #include <iostream> #include <cstdio> #    
阅读全文
 
        
        posted @ 2014-05-14 20:42
whatbeg
阅读(205)
推荐(0)
        
            
        
        
摘要:        
跟上题是一个思路:http://www.cnblogs.com/whatbeg/p/3728545.html 只不过是上一题的扩展。 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #incl    
阅读全文
 
        
        posted @ 2014-05-14 20:09
whatbeg
阅读(222)
推荐(0)
        
            
        
        
摘要:        
A.解救小QBFS。每次到达一个状态时看是否是在传送阵的一点上,是则传送到另一点即可。代码:#include #include #include #include #include #include using namespace std;#define NA 100007char mp[52][5...    
阅读全文
 
        
        posted @ 2014-05-14 19:52
whatbeg
阅读(537)
推荐(0)
        
            
        
        
摘要:        
B.Cuckoo for Hashing模拟题。代码:#include #include #include #include #include #include #include using namespace std;#define N 50007int a[1004],b[1004];int m...    
阅读全文
 
        
        posted @ 2014-05-14 19:50
whatbeg
阅读(233)
推荐(0)
        
            
        
        
摘要:        
生成函数题。 题意:有币值1,2,5的硬币若干,问你最小的不能组成的币值为多少。 解法:写出生成函数: 然后求每项的系数即可。 因为三种硬币最多1000枚,1*1000+2*1000+5*1000=8000,那么多项式乘积的最高次数为8000 用c保存累计相乘各项的系数,tc保存c和当前项相乘的系数    
阅读全文
 
        
        posted @ 2014-05-14 19:45
whatbeg
阅读(265)
推荐(0)
        
 
		
    
        
        
摘要:        
一直想用诸如node k = node(args1,args2...argsN)的方式来初始化一个结构体,可以简化很大一部分代码,开始不知道怎么写,后来问人家,总结出一套代码如下:struct Point{ int x,y; Point(int _x_,int _y_) { ...    
阅读全文
 
        
        posted @ 2014-05-07 18:51
whatbeg
阅读(1380)
推荐(0)
        
 
		
    
        
        
摘要:        
这题明明是一个简单的类似约瑟夫环的问题,但是由于细节问题迟迟不能得到正确结果,结果比赛完几分钟才改对。。耻辱。代码:#include #include #include #include #include #define ll long longusing namespace std;#define...    
阅读全文
 
        
        posted @ 2014-05-05 21:59
whatbeg
阅读(318)
推荐(0)
        
 
		
    
        
        
摘要:        
A.Planting Trees排序+模拟常识问题,将耗时排一个序,时间长的先种,每次判断更新最后一天的时间。代码:#include #include #include #include #include #define Mod 1000000007#define INT 2147483647#de...    
阅读全文
 
        
        posted @ 2014-05-04 22:48
whatbeg
阅读(434)
推荐(1)
        
 
		
    
        
        
摘要:        
A.Islands这种联通块的问题一看就知道是并查集的思想。做法:从高水位到低水位依序进行操作,这样每次都有新的块浮出水面,可以在前面的基础上进行合并集合的操作。给每个位置分配一个数字,方便合并集合。同时将这些数字也排一个序,降低枚举的复杂度。合并集合时向四周查询浮出水面但是没有合并到同一集合的点进...    
阅读全文
 
        
        posted @ 2014-05-02 19:35
whatbeg
阅读(491)
推荐(0)
        
 
		
    
        
        
摘要:        
这章演示了一些最基本的Django开发动态网页的实例,由于版本不一样,我用的是Django 1.,6.3,有些地方按书上的做是不行的,所以又改了一些,写出来让大家参考。这是一个用python写的一个显示当前时间的网页。1.开始一个项目.在命令行中(指定要保存项目代码的盘或文件夹下)输入 python...    
阅读全文
 
        
        posted @ 2014-04-29 11:07
whatbeg
阅读(321)
推荐(0)
        
 
		
    
        
        
摘要:        
背包问题。思路:如果m=5: 求出背包容量为m-5,买前n-1样便宜的菜(排个序)的最大价值(即最大消费,即消费完后剩余值最接近5)最后减去最大的那个菜的价格,就得到最小的余额。代码:#include #include #include #include #include using namespa...    
阅读全文
 
        
        posted @ 2014-04-27 15:17
whatbeg
阅读(277)
推荐(0)
        
            
        
        
摘要:        
这题有些巧妙,看了别人的题解才知道做的。因为按常规思路的话,背包容量为浮点数,,不好存储,且不能直接相加,所以换一种思路,将背包容量与价值互换,即令各银行总值为背包容量,逃跑概率(1-P)为价值,即转化为01背包问题。此时dp[v]表示抢劫到v块钱成功逃跑的概率,概率相乘。最后从大到小枚举v,找出概...    
阅读全文
 
        
        posted @ 2014-04-27 14:49
whatbeg
阅读(211)
推荐(0)
        
            
        
        
摘要:        
01背包的变形。先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值。代码:#include #include #include #include #include using namespace std;#define...    
阅读全文
 
        
        posted @ 2014-04-27 13:34
whatbeg
阅读(159)
推荐(0)
        
            
        
        
摘要:        
这种01背包的裸题,本来是不想写解题报告的。但是鉴于还没写过背包的解题报告。于是来一发。这个真的是裸的01背包。代码:#include #include using namespace std;#define N 1007int c[N],w[N],dp[N];int main(){ int ...    
阅读全文
 
        
        posted @ 2014-04-27 11:13
whatbeg
阅读(185)
推荐(0)
        
 
		
    
        
        
摘要:        
题意:给定两个NxN的棋盘,每个棋盘都有一个‘车’的摆放状态,问进行若干次交换,能否使棋盘1变为棋盘2.交换规则:每次选两个‘车’,坐标分别为(r1,c1),(r2,c2),如果r1c2,则可以将两个点分别移到(r1,c2),(r2,c1)。做法:BFS,从状态Y1广搜,每次选两行r1,r2(r1#...    
阅读全文
 
        
        posted @ 2014-04-25 14:06
whatbeg
阅读(300)
推荐(0)
        
 
		
    
        
        
摘要:        
很多时候,我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序,方法1.用List的成员函数sort进行排序方法2.用built-in函数sorted进行排序(从2.4开始)这两种方法使用起来差不多,以第一种为例进行讲解:从Python2.4开始,sort方法有了三个可...    
阅读全文
 
        
        posted @ 2014-04-23 21:23
whatbeg
阅读(358)
推荐(0)
        
 
		
    
        
        
摘要:        
问题:对于一颗线段树,每次询问[L,R],求此区间中任意一段连续序列,此连续序列和最大。解法:每个节点维护4个值:max:此区间内的最大连续和sum:该节点以下的节点值得总和lmax:此区间的从左端开始的最大连续和rmax:此区间的从右端开始的最大连续和合并区间时,该区间的最大连续和为:max(左子...    
阅读全文
 
        
        posted @ 2014-04-21 19:16
whatbeg
阅读(1616)
推荐(1)
        
 
		
    
        
        
摘要:        
Python中的strip用于去除字符串的首尾字符串,同理,lstrip用于去除左边的字符,rstrip用于去除右边的字符。这三个函数都可传入一个参数,指定要去除的首尾字符。需要注意的是,传入的是一个字符数组,编译器去除两端所有相应的字符,直到没有匹配的字符,比如:theString ='saaaay yes no yaaaass'printtheString.strip('say')theString依次被去除首尾在['s','a','y']数组内的字符,直到字符在不数组内。所以,输出的结果为:yes no比较简    
阅读全文
 
        
        posted @ 2014-04-13 11:59
whatbeg
阅读(356)
推荐(0)
        
            
        
        
摘要:        
第三章3-10 交换异常处理方式代码:#makeTextFile.py#!/usr/bin/env python'makeTextFile.py'import osls = os.linesep#get File namewhile True: fname = raw_input("Enter...    
阅读全文
 
        
        posted @ 2014-04-13 11:13
whatbeg
阅读(741)
推荐(0)
        
 
		
    
        
        
摘要:        
Chapter 3:例3-1 makeTextFile.py#!/usr/bin/env python'makeTextFile.py'import osls = os.linesep#get File namewhile True: fname = raw_input("Enter file name: ") if os.path.exists(fname): print "ERROR: '%s' already exists" % fname else: break#get file contents linesall    
阅读全文
 
        
        posted @ 2014-04-12 23:47
whatbeg
阅读(1142)
推荐(0)
        
            
        
        
摘要:        
实际上是一个扩展维度的矩形嵌套问题。一个物体能嵌入另一个物体中,当且仅当这个物体的所有维度的长度都小于另外一个(本题是小于等于),又因为可以旋转等变换,所以干脆将每个箱子的边从小到大排序,以便于判断是否能够嵌套。然后将箱子按第一维度从小到大排序,然后就是求一个“严格上升子序列”了。代码:#include #include #include #include #include using namespace std;#define N 47struct Box{ int w[12]; int ind;}box[34];int dp[N],little[N],ans[N];int cm...    
阅读全文
 
        
        posted @ 2014-04-12 20:53
whatbeg
阅读(184)
推荐(0)
        
            
        
        
摘要:        
题意:n个士兵站成一排,求去掉最少的人数,使剩下的这排士兵的身高形成“峰形”分布,即求前面部分的LIS加上后面部分的LDS的最大值。做法:分别求出LIS和LDS,枚举中点,求LIS+LDS的最大值。。注意一点,有可能最中间的值重复,也有可能不重复,所以要考虑这两种情况:(假设中点为K)1)不重复的情况,求LIS(K) + LDS(K+1)的最大值2)重复的情况,这时K既包含在LIS当中,也包含在LDS中,计算了两次,最终结果要减掉1复杂度:O(n^2)代码:#include #include using namespace std;#define N 1007int dpi[N],dpd[N]    
阅读全文
 
        
        posted @ 2014-04-12 17:51
whatbeg
阅读(295)
推荐(0)
        
 
		
    
        
        
摘要:        
最长公共子序列,经典问题。算是我的DP开场题吧。dp[i][j]表示到s1的i位置,s2的j位置为止,前面最长公共子序列的长度。状态转移:dp[i][j] = 0 (i == 0 || j == 0)dp[i][j] = dp[i-1][j-1] + 1 (s1[i] == s2[j]) (此字符相等,说明此时最长公共子序列的长度等于他们之前的LCS(简称)长度加上这个相等的字符(长度为1))dp[i][j] = max(dp[i-1][j],dp[i][j-1]) (s1[i] != s2[j]) (此字符不相等,说明此时LCS为i...    
阅读全文
 
        
        posted @ 2014-04-07 20:30
whatbeg
阅读(263)
推荐(0)
        
 
		
    
        
        
摘要:        
最近在看《鲜活的数据:数据可视化指南》,学习一些数据可视化与数据分析的技术,本例是该书第一章的一个例子衍伸而来。实例内容:从www.wunderground.com收集美国纽约州布法罗市(水牛城)2014年3月份每天最高气温,并导入Excel或WPS表格,制做成折线图。工具准备:安装好的Python...    
阅读全文
 
        
        posted @ 2014-04-04 13:10
whatbeg
阅读(5988)
推荐(2)
        
 
		
    
        
        
摘要:        
题意:求一幅无向图的最小生成树与最小生成树,不存在输出-1解法:用Kruskal求最小生成树,标记用过的边。求次小生成树时,依次枚举用过的边,将其去除后再求最小生成树,得出所有情况下的最小的生成树就是次小的生成树。可以证明:最小生成树与次小生成树之间仅有一条边不同。不过这样复杂度有点高,可达O(m^...    
阅读全文
 
        
        posted @ 2014-04-03 20:36
whatbeg
阅读(307)
推荐(0)
        
            
        
        
摘要:        
由于次短路一定存在,则可知次短路一定是最短路中某一条边不走,然后回到最短路,而且只是一条边,两条边以上不走的话,就一定不会是次短路了(即以边换边才能使最小)。所以可以枚举每一条边,算出从起点到这条边起点的最短距离,以及从终点到这条边终点的最短距离,再加上这条边的权值,看是否是次短路(比最短路总权值大...    
阅读全文
 
        
        posted @ 2014-04-03 09:44
whatbeg
阅读(248)
推荐(0)
        
 
		
    
        
        
摘要:        
转自https://www.byvoid.com/blog/2-sp-mst posted by byvoid[次短路径]次短路径可以看作是k短路径问题的一种特殊情况,求k短路径有Yen算法等较为复杂的方法,对于次短路径,可以有更为简易的方法。下面介绍一种求两个顶点之间次短路径的解法。我们要对一个有...    
阅读全文
 
        
        posted @ 2014-04-02 20:25
whatbeg
阅读(572)
推荐(0)
        
            
        
        
摘要:        
今天看了一下《计算机网络:自顶向下方法》,也就是计算机网络的教材的应用层一章,决定实现以下后面的Java C/S应用程序的例子,用来演示TCP和UDP套接字编程。程序流程如下:1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接字将该行发送到服务器。2.服务器从其连接套接字读取一行字符。3.服务器将该行字符转换成大写。4.服务器将修改后的字符串(行)通过连接套接字再发回给客户机。5.客户机从其套接字中读取修改后的行,然后将该行在其标准输出(监视器)上打印出来。下面是应用程序客户机端的代码:TCPClient.javaimport java.io.*;import java.net.*;    
阅读全文
 
        
        posted @ 2014-04-02 20:10
whatbeg
阅读(1535)
推荐(1)
        
 
		
    
        
        
摘要:        
这题可以用次小生成树解,这里用Kruskal算法来做。每条边除维护u,v,w外,还维护:used:表示这条边是否加过eq:表示有没有与这条边相等的边del:删除标记,以便删边之用如果对于一个最小生成树的的边A,有一条与之权值相等的边B,则考虑把A删掉,再求一次最小生成树,看求出的总权值是否与前一个最...    
阅读全文
 
        
        posted @ 2014-03-30 12:44
whatbeg
阅读(349)
推荐(0)
        
 
		
    
        
        
摘要:        
Constructing RoadsTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5227Accepted Submission(s): 1896...    
阅读全文
 
        
        posted @ 2014-03-26 17:27
whatbeg
阅读(252)
推荐(0)