摘要: 显然,定义状态f[i][j][k][l]表示第一条路线走到(i,j),第二条走到(k,l)所取的数最大和。 状态转移方程即f[i][j][k][l]= max( max(f[i-1][j][k-1][l],f[i][j-1][k-1][l]), max(f[i-1][j][k][l-1],f[i][ 阅读全文
posted @ 2019-04-05 23:16 AD_shl 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 线型动态规划的好题…… 分析题意,不难设计出状态:f[i][x][y][z]表示完成第i个任务后,三个人分别在x,y,z位置时的花费。但是这样的状态时间与空间都无法承受,不可行。 再次考虑:当完成第i个任务后,其中一人必定在p[i]上,因此状态可以减少一维:f[i][x][y]表示完成第i个任务后, 阅读全文
posted @ 2019-04-05 23:05 AD_shl 阅读(191) 评论(0) 推荐(0) 编辑
摘要: hash的入门题,通过hash我们可以在O(1)的时间里判断一个字符串的任意子串是否相等,恰好符合本题题意。 设计hash函数f[i]存储字符串s第1~i的子串的哈希值。显然存在f[i]=f[i-1]*131+(s[i]-'a'+1). 有了f数组,就可以求出任意子串的哈希值,因此我们就可以判断任意 阅读全文
posted @ 2019-04-05 20:32 AD_shl 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 最长公共上升子序列的模板题,仿照LCS和LIS的状态定义方式,我们定义f[i][j]表示a1~ai与b1~bj构成的以bj结尾的LCIS的长度,显然答案为max{f[n][i]}. 当ai≠bj时,f[i][j]=f[i-1][j]. 当ai=bj时,f[i][j]=max{f[i-1][k]+1} 阅读全文
posted @ 2019-04-05 20:18 AD_shl 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 这是一道基础数据结构的综合题,思考量较大,但是实现简单。 我们考虑建立三个队列,分别存储原始长度、切开后第一段的长度、第二段长度。显然,这三个队列是非严格单调下降的,对于每个时刻,将要切开的蚯蚓即为三个队列队头的最大值。另外,我们用一个变量delta表示整个集合的偏移值,即队列中的长度+delta= 阅读全文
posted @ 2019-04-05 15:29 AD_shl 阅读(243) 评论(0) 推荐(0) 编辑