摘要: 题意:有一刷子,能将区间内涂成同一字母。给出src,dst串,问最少涂几次? 用dp[i][j]表示区间[i,j]内最少涂的次数。len=1,2时很明显。len=3时,dp[i][j]要么就在dp[i][j-1]的基础上多涂一次,要么和[i,j-1]中某个和它同字母的一起涂。设第k个和j一样,那么就 阅读全文
posted @ 2018-10-04 11:29 degvx 阅读(319) 评论(0) 推荐(0)
摘要: 题意:给出要n个时间穿的服装。服装脱下就不能再穿。问最少要准备多少? dp[i][j]表示i到j之间最少花费。如果n=1(n指长度),肯定结果为1,n=2时,也很好算。然后n=3的时候dp[i][j],到前面找和它相同的k,因为只有和它相同的才能在n=3的时候利用上。dp[i][k]的结果k肯定在最 阅读全文
posted @ 2018-10-04 10:46 degvx 阅读(127) 评论(0) 推荐(0)
摘要: 比较特别的区间dp。小的区间转移大的区间时,也要枚举断点。不过和普通的区间dp比,断点有特殊意义。表示断点是区间最后取走的点。而且一个区间表示两端都不取走时中间取走的最小花费。 阅读全文
posted @ 2018-09-30 20:47 degvx 阅读(143) 评论(0) 推荐(0)
摘要: 先得出区间为1和2时的结果。用arr[i][j]记录i,j内的和。dp[i][j]记录i,j区间全加起来的最小花费。那么区间大小为1和2时都是明显的。为3时枚举断点。其中一个区间大小为1也是可行的。 虽然复杂度为n^3,不过比n!好。 阅读全文
posted @ 2018-09-30 19:41 degvx 阅读(102) 评论(0) 推荐(0)
摘要: 题意:一个数,二进制形式去掉leading zero后,如果0的数量大于等于1的数量,计算区间内这样数的个数。 右区间转为二进制形式,然后在二进制上数位dp,递归的时候记录leading zero是否消除了,以及0比1多的数量delta。dp记录时有没有leading zero也是一个状态。 阅读全文
posted @ 2018-09-30 15:02 degvx 阅读(101) 评论(0) 推荐(0)
摘要: 题意:给出n,问1-n中有13且能整除13的数数量。 就是hd3555和codeforces beautiful number的合成版。dp记录待填长度,是否带有13,前面数的模13余数,前一个数是k的时候的b-number数数量。 阅读全文
posted @ 2018-09-30 13:55 degvx 阅读(129) 评论(0) 推荐(0)
摘要: 题意:一个数能整除它所有的位上的数字(除了0),统计这样数的个数。 注意离散化,为了速度更快需存入数组查找。 不要每次memset,记录下已有的长度下符合条件的个数。 数位dp肯定是从高位到低位。 记录数字已经有多大,还有lcm,递归传下去。 阅读全文
posted @ 2018-09-30 11:31 degvx 阅读(110) 评论(0) 推荐(0)
摘要: 题意:几个人要去一个城市k天,现给出各航班的日期和花费,让这n个人能相会k天的最小花费? 用数组arr1[i]记录在第i天人到齐的最小花费。arr2[i]记录第i天之后才有人开始走的最小花费。然后取arr1[i]+arr2[i+k+1]的最小值。 阅读全文
posted @ 2018-09-29 13:55 degvx 阅读(137) 评论(0) 推荐(0)
摘要: 题意:给出一个数组,求其中和小于t的区间数。 先计算前缀和数组sum[i]。对当前的sum[i],查询树状数组中有几个比(sum[i]-t)大的数,那么用sum[i]减它就是一个合法区间。再将当前的sum[i]加入树状数组。 //#pragma comment(linker,"/STACK:1024 阅读全文
posted @ 2018-09-29 09:48 degvx 阅读(211) 评论(0) 推荐(0)
摘要: 题意:一个串,右循环移位后,告诉你第一个字母,还能告诉你一个,问你能确定移位后的串的概率。 用map记录每个字母出现的位置。对于每个字母,用arr[j][k]记录它的所有出现位置的后j位是字母k的个数。对每个j数arr[j]中arr[j][k]等于1的个数,取最大,说明k取这个时区分该字母的概率最大 阅读全文
posted @ 2018-09-28 16:30 degvx 阅读(123) 评论(0) 推荐(0)