第七周 Leetcode 466. Count The Repetitions 倍增DP (HARD)
直接给出DP方程
dp[i][k]=dp[i][k-1]+dp[(i+dp[i][k-1])%len1][k-1];
dp[i][k]表示从字符串s1的第i位开始匹配2^k个s2串需要的长度
最后通过一个循环 累积最多可以匹配多少个s2串 除以n2下取整就是答案
用倍增加速后 总的复杂度nlogn 而本题的n非常小 轻松AC
体会到倍增的魅力了吧。
const int maxn=100+1,INF=1e+9;
long long int dp[maxn][30];
class Solution {
public:
int getMaxRepetitions(string s1, int n1, string s2, int n2) {
memset(dp,0,sizeof(dp));
int len1=s1.length(),len2=s2.length();
int l1=0,l2=0;
for(int i=0;i<len1;i++)
{
l1=i;l2=0;
while(l2<len2)
{
while(l1<n1*len1&&s1[l1%len1]!=s2[l2])l1++;
l1++;l2++;
}
dp[i][0]=l1-i;
}
for(int k=1;k<30;k++)
for(int i=0;i<len1;i++)
{
dp[i][k]=dp[i][k-1]+dp[(i+dp[i][k-1])%len1][k-1];
}
long long int ans=0;
int begin=0;
for(int k=29;k>=0;k--)
while((begin+dp[(begin%len1)][k])<=n1*len1)
{ans+=(1<<k);begin+=dp[(begin%len1)][k];}
return ans/n2;
}
};
第七周 Leetcode 466. Count The Repetitions 倍增DP (HARD)的更多相关文章
- [LeetCode] 466. Count The Repetitions 计数重复个数
Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...
- CH5702 Count The Repetitions[倍增dp]
http://contest-hunter.org:83/contest/0x50%E3%80%8C%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E3%80%8D%E4%B ...
- 【leetcode 字符串】466. Count The Repetitions
https://leetcode.com/problems/count-the-repetitions/description/ 找循环节 https://www.cnblogs.com/grandy ...
- 466. Count The Repetitions
Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...
- 第十七周 Leetcode 403. Frog Jump(HARD) 线性dp
leetcode403 我们维护青蛙从某个石头上可以跳那些长度的距离即可 用平衡树维护. 总的复杂度O(n^2logn) class Solution { public: bool canCross( ...
- 201521123038 《Java程序设计》 第七周学习总结
201521123038 <Java程序设计> 第七周学习总结 1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 ...
- 20175209 《Java程序设计》第七周学习总结
20175209 <Java程序设计>第七周学习总结 一.教材知识点总结 第八章 常用类和实用类 1.String类 构造String对象 常量对象:""中的字符序列, ...
- 20175204 张湲祯 2018-2019-2《Java程序设计》第七周学习总结
20175204 张湲祯 2018-2019-2<Java程序设计>第七周学习总结 教材学习内容总结 -第八章常用实用类要点: 一.String类: 1.String类所在的包:java. ...
- 20175305张天钰《java程序设计》第七周学习总结
<java程序设计>第七周学习总结 第八章 常用实用类 1.String类 1.String类不可以有子类. 2.用户无法输出String对象的引用,输出的是字符序列 3.构造方法:Str ...
随机推荐
- ubuntu Android Studio以及SDK安装
先使用迅雷下载linux版的Android Studio以及SDK,下载地址是https://dl.google.com/dl/android/studio/ide-zips/1.1.0/androi ...
- python3.6的requests库&HTMLTestRunner实现测试报告
'''1. 在suite.addTest时,可以把需要的用例先写入一个列表list中,list当做addTest的参数:2. 在unittest.main(verbosity=2)中,默认为1,设置为 ...
- Python之“Hello World”
Python之“Hello World” 了解Python: 编译型和解释型 编译:把明文代码执行前,先转换成二进制,在执行.这个过程叫编译 解释器:将明文代码转成二进制的 Linux中,gcc编译, ...
- vs2003 刷新项目失败。无法从服务器中检索文件夹信息
环境: 操作系统:windows server 2003 开发工具:Visual stuadio 2003 FrameWork: 1.1 打开web项目的时候报错 提示 项目刷新失败,无法从服务器 ...
- nativeLibraryDirectories=[/data/app/com.lukouapp-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libxxxx.so
一开始我遇到的问题是,如果手机有SD卡槽,则不管有没有插卡,都会闪退,打日记后发现是找不到so文件.报错日记如下: nativeLibraryDirectories=[/data/app/com.lu ...
- Leetcode 152.乘机最大子序列
乘积最大子序列 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 ...
- oracle10g_v$sqltext之对等视图v$sqltext_with_newlines
--v$sqltext_with_newlines是v$sqltext等同体,较之易读性强(由sql_address及sql_hash_value唯一确认一个cached cursor中的sql)SQ ...
- Codeforces698C. LRU
n<=20种东西,有个大小k<=n的箱子,每次会以固定的概率从所有东西里选一种,若箱子里有空位且这种东西没出现过就丢进去,若箱子满了且这种东西没出现过就把最早访问过的一个丢掉,(只要在每次 ...
- Elasticsearch的Java API做类似SQL的group by聚合。
https://www.cnblogs.com/kangoroo/p/8033955.html
- 创建Django项目(七)——表单
2013-08-15 19:43:01| 1.URL配置和视图 "blog\urls.py"文件中:添加url(r'write_article/$', 'write ...