Leetcode 466

直接给出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)的更多相关文章

  1. [LeetCode] 466. Count The Repetitions 计数重复个数

    Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...

  2. 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 ...

  3. 【leetcode 字符串】466. Count The Repetitions

    https://leetcode.com/problems/count-the-repetitions/description/ 找循环节 https://www.cnblogs.com/grandy ...

  4. 466. Count The Repetitions

    Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...

  5. 第十七周 Leetcode 403. Frog Jump(HARD) 线性dp

    leetcode403 我们维护青蛙从某个石头上可以跳那些长度的距离即可 用平衡树维护. 总的复杂度O(n^2logn) class Solution { public: bool canCross( ...

  6. 201521123038 《Java程序设计》 第七周学习总结

    201521123038 <Java程序设计> 第七周学习总结 1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 ...

  7. 20175209 《Java程序设计》第七周学习总结

    20175209 <Java程序设计>第七周学习总结 一.教材知识点总结 第八章 常用类和实用类 1.String类 构造String对象 常量对象:""中的字符序列, ...

  8. 20175204 张湲祯 2018-2019-2《Java程序设计》第七周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第七周学习总结 教材学习内容总结 -第八章常用实用类要点: 一.String类: 1.String类所在的包:java. ...

  9. 20175305张天钰《java程序设计》第七周学习总结

    <java程序设计>第七周学习总结 第八章 常用实用类 1.String类 1.String类不可以有子类. 2.用户无法输出String对象的引用,输出的是字符序列 3.构造方法:Str ...

随机推荐

  1. 转:Centos7安装zabbix3.4超详细步骤解析

    安装前准备: 1.1 安装依赖包: yum -y install wget net-snmp-devel OpenIPMI-devel httpd openssl-devel java lrzsz f ...

  2. vim使用学习

    1.1在正常模式下,使用h,j,k,l实现左,下,上,右移动. (如果不再正常模式下,使用Esc键进入正常模式) 1.2退出vim,先进入到正常模式,输入:q!退出,但不保存任何修改. 1.3在正常模 ...

  3. Python Pandas库的学习(三)

    今天我们来继续讲解Python中的Pandas库的基本用法 那么我们如何使用pandas对数据进行排序操作呢? food.sort_values("Sodium_(mg)",inp ...

  4. Qt 编写应用支持多语言版本--一个GUI应用示例

    简介 上一篇博文已经说过如何编写支持多语言的Qt 命令行应用,这一篇说说Qt GUI 应用多语言支持的坑. 本人喜欢用代码来写布局,而不是用 Qt Designer 来设计布局,手写布局比 Qt De ...

  5. Mac os安装MySQL数据库,系统提示mysql: command not found该怎么办

    当我们安装好MySQL后,在终端输入mysql命令,发现并不能看到自己安装的数据库,这是因为你没有配置环境变量. 在os系统中安装MySQL数据库默认保存在/usr/local/mysql 那么我们应 ...

  6. xtu summer individual 5 F - Post Office

    Post Office Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID ...

  7. Codeforces704C. Black Widow

    n<=1e5个值v,分别由<=1e5的m个变量中的1<=ki<=2个布尔变量xj(或某个变量取反)或起来组成,而所有的v异或起来为1,一个x不会在输入数据中出现超过2次,包括他 ...

  8. Linux下汇编语言学习笔记27 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  9. idea中javaweb的mysql8.0.15配置问题

    mysql8.0.x以后的版本在连接数据库的时候有些不同. 首先: Class.forName("com.mysql.cj.jdbc.Driver"); 其次: DriverMan ...

  10. eclipse添加高版本tomcat问题

    eclipse添加高版本tomcat会报错,提示无法匹配高版本的容器installation is expected 解决方法: 1.找到tomcat的lib目录下的catalina.jar包,用压缩 ...