04 2019 档案

摘要:不是自己写的代码,但是帮忙d了挺久... 很直观的想法,如果把起点,终点,和所有的墙的边界点看作点的话,最终的最短路径一定只经过这些点,把图建出来,跑一边最短路即可。 阅读全文
posted @ 2019-04-17 14:32 IAT14 阅读(249) 评论(0) 推荐(0)
摘要:题目中认为如果两段对应位音调变动幅度相同,则两端相似。求最长的不相交,且至少相隔1格,的相似段落的长度。那么我们考虑对原序列,求出两位之前的差。这样子问题就转化成了,求两端相同的最长且不相交,且至少相隔1个,的子序列了,是经典的后缀数组问题。 我们考虑先二分答案长度k,把问题转化为判断性问题。 然后 阅读全文
posted @ 2019-04-13 16:39 IAT14 阅读(198) 评论(0) 推荐(0)
摘要:我们先考虑只有一个窗口的情况。如果只有一个窗口,显然我们应该按照吃饭的时间进行排序,按这个顺序先后打饭吃饭即可。因为窗口打饭时间的和是一定的,我们越让吃饭快的人靠后,最后的结束时间就可能更早。 那么对于两个窗口,我们依旧将人按照吃饭快慢排序。现在得到了一个序列,我们考虑序列DP。用f[i][t]表示 阅读全文
posted @ 2019-04-12 18:01 IAT14 阅读(183) 评论(0) 推荐(0)
摘要:每一行是独立的,分开处理即可。 dp[i][j]表示[i,j]这一段,取完的最大收益。转移很显然,dp[i][j] = max(dp[i + 1][j] + 2^(m - (j - l)) * mp[t][i],dp[i][j - 1] + 2^(m - (j - l)) * mp[t][j]) 不 阅读全文
posted @ 2019-04-12 14:39 IAT14 阅读(156) 评论(0) 推荐(0)
摘要:我们观察到m非常小。 考虑只有一行的情况,dp[i][o]表示[1,i]这一段中取出o个矩形,的最大价值。我们预处理出w[i][j]表示[i,j]这一段的最大子矩阵 。那么转移非常显然。 dp[i][o] = max(dp[j - 1][o] + w[j][i]) 我们接着考虑两行的情况,我们类比一 阅读全文
posted @ 2019-04-05 20:12 IAT14 阅读(237) 评论(0) 推荐(0)
摘要:做起来不太难,但是很难想的一道题。 分两个步骤,第一个步骤是先求出,最后一个数字是多少。 我们考虑d[i]表示,[1,i]最后一个数字最小情况下,最后一个数字的开始位置。 那转移方程很显然,d[i] = j(满足s[d[j - 1],j - 1]<s[j,i],且j距离i最近,这样子最小)。 这样我 阅读全文
posted @ 2019-04-05 17:45 IAT14 阅读(191) 评论(0) 推荐(0)
摘要:dp[i][k]表示,在i及i左侧,分成k块,的最大单词数目。 w[i][j]表示,在[i,j],内部多少个单词在此区间开始和结束。 转移方程为dp[i][k] = max(dp[j][k - 1] + w[j + 1][i]) 通过考虑每个单词的结束而非开始,而避开后后效性问题。 如果某个单词是另 阅读全文
posted @ 2019-04-05 10:53 IAT14 阅读(204) 评论(0) 推荐(0)