标签:
7.12
HDU 5280 Senior‘s Array
补一个O(n)的dp方法。
dp1[i]为i左端最大连续和。dp2[i]为i右端最大连续和。
枚举改p的位置。
若p在最大区间和中。则ans为p左右最大连续和加上p。
若p不在最大区间和中。则ans为所有最大连续和中最大的。
注意区间取整个数组时。p是一定包含在内的。
即第二种情况不能取整个数组。
7.13
结果上讲的确什么都没干。
7.14
补一个上次的BC
HDU 5282 Senior‘s String
本来是想昨天补的。毕竟高代考完≈放假了。
然而磨磨唧唧没看懂状态转移方程。
今天反复看那截官方题解。又看了别人代码。才算差不多懂。
dp数组就是求LCS。
用f[i][j]表示在X串的前i个字符中,有多少个长度为dp[i][j]的子序列在Y的前j个字符中也出现了。
注意一下空串的情况。所以f初始化是dp[i][j]==0时f[i][j]=1。其余为0。
转移分两个情况。
i) X[i]不属于长度为dp[i][j]的子列。只有dp[i][j]==dp[i-1][j]时才会有这种情况。那么f[i][j]+=f[i−1][j]。
ii) X[i]属于长度为dp[i][j]的子列。这时要先找到Y中最后一个和X[i]的字符。位置标识为p。
因为X[i]结尾的长度为dp[i][j]的子列数等于在最后一对匹配的字符前面且长度为dp[i][j]-1的子列数。
即满足dp[i−1][p−1]+1==dp[i][j]时。有f[i][j]+=f[i−1][p−1]。
可以先把所有p用一个数组先记下。然而并没有快。
7.15
背英语。
7.16
考完心情坏坏。补BC。
迷之RE。明日再调。
7.17
HDU 5283 Senior‘s Fish
发现自己蠢死了。
#define maxn 100000+10
然后线段树大小写tree[maxn*4]。
。。。。。。。。。。。。。。。。
算是温习了一下线段树和lazytag。第一次补完一套BC。
7.18
打了个BC。几个计算客。待补。
标签:
原文地址:http://www.cnblogs.com/chdacm/p/4658113.html