UVa 1629 - Cake slicing(记忆化搜索)
对每块蛋糕进行统计,若有1颗就直接返回1,2颗或以上就继续切,没有则不可行。然后继续切的话枚举每一个可以切的方法,记忆化搜索。
1 |
|
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
对每块蛋糕进行统计,若有1颗就直接返回1,2颗或以上就继续切,没有则不可行。然后继续切的话枚举每一个可以切的方法,记忆化搜索。
1 | #include<cstdio> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
给出两个序列,要求合并后的序列的子序列包含所给序列,为合并后序列的最短长度和有几种合并方式可以合并出最短序列。类似于求公共子序列的方法,具体转移方程见代码。
1 | #include<cstdio> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
首先枚举所有 a ,然后利用扩展欧几里得算法求出 b 。之后进行验证。
1 | #include<cstdio> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
计算第 a b 个斐波那契数对 n 取模的值。对不同的 n 取模,最长 n 2 就会出现循环。首先预处理计算所有可能的值,然后对每个输入快速幂取模找在周期中的位置输出。数据大必须用unsigned long long。
1 | #include<cstdio> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
给出n只筷子,找出 k + 8 组,每组三根,输出每组最短两根长度差的平方和的最小值。
倒序读入,对每个可以选的点位有两种转移状态。
DP数组滚动使用,节约空间和初始化时间。
状态转移方程: d [ i ] [ j ] = m i n ( d [ i − 1 ] [ j ] , d [ i − 2 ] [ j − 1 ] + ( a [ i ] − a [ i − 1 ] ) 2 )
1 | #include<cstdio> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
d [ u ] [ 1 ] 和 d [ u ] [ 0 ] 分别表示选结点u和不选结点u在它的子树中最大的数目, f [ u ] [ t ] 表示相应选法的唯一性。
d [ u ] [ 1 ] = s u m { d [ v ] [ 0 ] } , d [ u ] [ 0 ] = s u m { m a x ( d [ v ] [ 0 ] , d [ v ] [ 1 ] ) } 。
当选择结点的子树的方案有不唯一时,该结点方案不唯一。
1 | #include<iostream> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
书上给出了思路和DP部分的代码,其他的就很简单了。
1 | #include<cstdio> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
给出一个 n 、 m 、 k ,生成一个序列。问其中包含1到k所有正整数的最短连续子序列的长度。
序列生成方式:
x 1 = 1 , x 2 = 2 , x 3 = 3 , x i = ( x i − 1 + x i − 2 + x i − 3 ) % m + 1
利用尺取法可以在 O ( n ) 时间内解决。
1 | #include<cstdio> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
给出一段播放记录,判断下次随机开始的地方有几种不同情况。
首先利用滑动窗口判断当前位置的前 s 个位置数字是否均不同。
然后枚举终点,每次进行验证。
1 | #include<cstdio> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
类似于筛选素数的方法,枚举前缀和即可。
1 | #include <cstdio> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **