P1357 花园 (矩阵快速幂+ DP)

题意:一个只含字母C和P的环形串

   求长度为n且每m个连续字符不含有超过k个C的方案数 

   m <= 5  n <= 1e15

题解:用一个m位二进制表示状态 转移很好想

   但是这个题是用矩阵快速幂加速dp的 因为每一位的转移都是一样的

   用一个矩阵表示状态i能否转移到状态j 然后跑一遍

   统计答案特别讲究 因为是一个环 从1 ~ n+m

   那么 m+1 ~ n + m之间就是我们所求的 1 ~ m和n+1 ~ n + m是同样的一段

   就相当于把m位二进制状态 转移n次

   然后再转移到自己的就是答案

   初试模板题

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;ll n, m, k, len;
struct node {ll c[64][64];
}re, x;bool check(int x) {int cnt = 0;while(x) {if(x & 1) cnt++;x >>= 1;}if(cnt > k) return false;return true;
}node mul(node a, node b) {node res;memset(res.c, 0, sizeof(res.c));for(int i = 0; i < len; i++)for(int j = 0; j < len; j++)for(int k = 0; k < len; k++)res.c[i][j] = (res.c[i][j] + a.c[i][k] * b.c[k][j] % mod) % mod;return res;
}node pow_mod(node x, ll y) {node res;for(int i = 0; i < len; i++) res.c[i][i] = 1;while(y) {if(y & 1) res = mul(res, x);x = mul(x, x);y >>= 1;}return res;
}int main() {scanf("%lld%lld%lld", &n, &m, &k);len = (1 << m);for(int i = 0; i < len; i++)for(int j = 0; j < len; j++)x.c[i][j] = 0;for(int i = 0; i < len; i++) {if(!check(i)) continue;int tmp = i;int ctmp = 1 << (m - 1);if((tmp & ctmp) == ctmp) tmp -= ctmp;tmp <<= 1;if(check(tmp)) x.c[i][tmp] = 1;tmp |= 1;if(check(tmp)) x.c[i][tmp] = 1;}re = pow_mod(x, n);ll ans = 0;for(int i = 0; i < len; i++) {if(check(i)) {ans += re.c[i][i];ans %= mod;}}printf("%lld\n", ans);return 0;
}
View Code

 

转载于:https://www.cnblogs.com/lwqq3/p/11080597.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA设置类、方法注释模板

类注释模板 File -> Other Setting -> Default Setting打开默认设置 Editor -> File and Code Templates -> Files -> Class 找到类注释模板&#xff0c;在public class前面添加模板注释 /** * program: ${PROJECT_NAME}->${NAME} * description: ${descript…

Element.shadowRoot

Element.shadowRoot转载于:https://www.cnblogs.com/yishenweilv/p/11083278.html

netty源码分析之服务端启动全解析

background netty 是一个异步事件驱动的网络通信层框架&#xff0c;其官方文档的解释为 Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and stream…

捕鱼达人java源代码解析_捕鱼达人源码Java

【实例简介】捕鱼达人源码Java实现的完整代码,对应的源码分析文章http://write.blog.csdn.net/postedit【实例截图】【核心代码】Fishlord├── bin│ ├── fishlord│ │ ├── Fish.class│ │ ├── Fishlord.class│ │ ├── Net.class│ │ ├─…

Android-一张图理解MVP的用法

M和V通过P交互&#xff0c;M做了两件事&#xff0c;开启子线程做耗时操作&#xff0c;然后使用原生的Hander方式切回主线程回调结果给P。 M做的两件事也可以使用比较流行的rxjava实现&#xff1a; 备注&#xff1a;图片不清晰可以看这里 转载于:https://www.cnblogs.com/develo…

Android 使用jtds远程访问数据库

最近老师让我用jtds这个jar包远程访问数据库中的数据&#xff0c;虽然不难&#xff0c;但有几个点还是要注意一下的。 1、jtds的jar包我使用的是1.2.7这个版本的&#xff0c;如果是Java工程使用的是1.3.1这个版本&#xff0c;Android工程不能使用1.3.1否则连接不上数据库 2、远…

java乘以2的位计算符号_java编程之:按位与运算,等运算规则

按位与运算符(&)参加运算的两个数据&#xff0c;按二进制位进行“与”运算。运算规则&#xff1a;0&00; 0&10; 1&00; 1&11;即&#xff1a;两位同时为“1”&#xff0c;结果才为“1”&#xff0c;否则为0例如&#xff1a;3&5 即 0000 0011 &a…

C语言文字加密程序的实现

前言&#xff1a;当今社会是一个信息社会&#xff0c;你的个人信息和聊天记录极有可能被别有用心的人时时刻刻监视着&#xff0c;那么你想不想实现专属于两个人或一个小圈子的人在社交软件上的交流不被任何其他人读懂呢&#xff1f;下面就给大家提供一个原理极其简单程序极其容…

菜鸟-es6

这里就不在唠叨浏览器对es6的支持跟转码器了&#xff0c;稍微百度一下就ok let and const 变量 and 常量 什么是变量,什么是常量 - 都是存储数据的容器, - 变量》即意思就是程序运行中可以发生变化的,- 常量》即程序运行中不可以发生改变&#xff0c;- 注意&#xff1a;常量…

阿帕奇退出java_java+tomcat+apache安装整合,启动/关闭,添加开机启动服务

安装java1.8#yum update 服务器更新源码包#rpm -qa |grep -E ^open[jre|jdk]|j[re|dk] 搜索任何版本的已安装JDK组件java-1.8.0-openjdk-headless-1.8.0.60-2.b27.el7_1.x86_64pygobject2-2.28.6-11.el7.x86_64pygobject3-base-3.8.2-6.el7.x86_64java-1.8.0-openjdk-1.8.0…

Spring Boot中如何干掉if else

Spring Boot中如何干掉if elsehttp://www.ciphermagic.cn/spring-boot-without-if-else.html 转载于:https://www.cnblogs.com/tyk766564616/p/11089133.html

java 抽象类与接口理解

2019独角兽企业重金招聘Python工程师标准>>> 在java 中抽象类是implements [等有时间了补充] 转载于:https://my.oschina.net/kuchawyz/blog/1929094

dreambackend.java_【AndroidTV】如何自定义屏保、更改屏保时长

目录目录系统屏保源码有哪些在设置中显示的屏保选项有哪些屏保选项是如何获得的多久出现屏保修改方法我的应用项目需求处理方式遇到一个诡异的问题系统屏保源码有哪些如果要自定义屏保可以参考这里的源码&#xff0c;清晰易懂&#xff0c;比网上教程好屏保源码位置BasicDreampa…

模块初识

1.模块 模块的定义与分类 一个模块就是一个py文件.这个魔铠存储很多相似的功能,相似的函数集合体分类 内置模块,标准库,Python自带的,times,os,sys,等等200多种第三方库(模块),各种大神写的一些模块,通过pip install....安装,有6000多种自己写的模块,自定义模块2.import # impo…

算法:把数组排成最小的数

* Description 把数组排成最小的数* 问题&#xff1a;输入一个正整数数组&#xff0c;把数组里所有数字拼接起来排成一个数&#xff0c;打印能拼接出的所有数字中最小的一个。* 例如输入数组{3&#xff0c;32&#xff0c;321}&#xff0c;则打印出这三个数字能排成的最小数字为…

牛客网在线编程java_NowCoder

com.adamjwh.pratice.offer.FindInArrays二维数组中的查找com.adamjwh.pratice.offer.ReplaceSpace替换空格com.adamjwh.pratice.offer.PrintList从头到尾打印链表com.adamjwh.pratice.offer.ReConstructTree重建二叉树com.adamjwh.pratice.offer.MakeQueueWithStack用两个栈实…

质量大国-学习概要

问题场景&#xff1a;英国 不断重新定义度量一码历史故事&#xff1a;冷兵器 206年 长平之战 度量衡商鞅统一度量衡 秦国 质量 0.83毫米的箭头 秦国的统一度量衡带来的巨大收益。 1&#xff0c;1791 巴黎 法国科学院 科学革命要为完美的社会提供基点 创建计量体系 孔多塞 重新定…

join的简单总结

BAT面试题&#xff1a;现在有T1、T2、T3三个线程&#xff0c;你怎样保证T2在T1执行完后执行&#xff0c;T3在T2执行完后执行&#xff1f; 这个线程问题通常会在第一轮或电话面试阶段被问到&#xff0c;目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单&#xff0c;…

python numpy矩阵索引_python – Numpy中的矩阵索引

索引后查看形状&#xff1a;In [295]: Anp.matrix([1,2,3])In [296]: A.shapeOut[296]: (1, 3)In [297]: A[0]Out[297]: matrix([[1, 2, 3]])In [298]: A[0].shapeOut[298]: (1, 3)这种行为的关键是np.matrix总是2d.所以即使你选择一行(A [0,&#xff1a;]),结果仍然是2d,形状(…

Activity的呼叫转移*(3个Activity之间的跳转)

Redirection的意思就是“呼叫转移&#xff0c;重寄”的意思 我们也许会再程序开发中遇到这种情况&#xff0c;需要从一个Activity&#xff08;A&#xff09;跳转到另一个Activity&#xff08;B&#xff09;&#xff0c;当在这个Activity&#xff08;B&#xff09;中处理完一些操…