【OpenJudge9270】【Pku2440】【递推】DNA
DNA
【描述】
A kind of virus has attacked the X planet, and many lives are infected. After weeks of study, The CHO (Creature Healthy Organization) of X planet finally finds out that this kind of virus has two kind of very simple DNA, and can be represented by 101 and 111. Unfortunately, the lives on the planet also have DNA formed by 0s and 1s. If a creature's DNA contains the virus' DNA, it will be affected; otherwise it will not. Given an integer L, it is clear that there will be 2 ^ L different lives, of which the length of DNA is L. Your job is to find out in the 2 ^ L lives how many won't be affected?
【输入】
The input contains several test cases. For each test case it contains a positive integer L (1 <= L <= 10 ^ 6). The end of input is indicated by end-of-file.
【输出】
For each test case, output K mod 2005, here K is the number of lives that will not be affected.
【样例输入】
4
【样例输出】
9
【Solution】
根据题意,111、101是不合法的,所以我们
令f1[i]为长度为i且结尾三个数是的所有合法01串数量,
令f2[i]为长度为i且结尾三个数是的所有合法01串数量,
令f3[i]为长度为i且结尾三个数是的所有合法01串数量,
令f4[i]为长度为i且结尾三个数是的所有合法01串数量,
令f5[i]为长度为i且结尾三个数是的所有合法01串数量,
令f6[i]为长度为i且结尾三个数是的所有合法01串数量。
设目前长度为n。我们发现000的后两位、100的后两位和f1[n]的最后三位的前两位相等,而多出来的一位有两种情况0和1,选择符合f1[n]最后一位的就行,方案数不变,这样就把f1[n]的最后三位凑全了,f1[n]便可以从f1[n-1]和f5[n-1]转移来。所以f1[n]=f1[n-1]+f5[n-1]。
以此类推:
f2[n]=f1[n-1]+f5[n-1]
f3[n]·=f2[n-1]
f4[n]=f2[n-1]
f5[n]=f3[n-1]+f6[n-1]
f6[n]=f4[n-1]
令dp[n]=f1[n]+f2[n]+f3[n]+f4[n]+f5[n]+f6[n]。下面就是激(奇)动(技)人(淫)心(巧)的数学推导了:
dp[n]=f1[n]+f2[n]+f3[n]+f4[n]+f5[n]+f6[n]
=f1[n-1]+f5[n-1]+f1[n-1]+f5[n-1]+f2[n-1]+f2[n-1]+f3[n-1]+f6[n-1]+f4[n-1]
=dp[n-1]+f3[n-2]+f6[n-2]+f1[n-2]+f5[n-2]+f1[n-2]+f5[n-2]
=dp[n-1]+f2[n-3]+f4[n-3]+f1[n-3]+f5[n-3]+f3[n-3]+f6[n-3]+f1[n-3]+f5[n-3]+f3[n-3]+f6[n-3]
=dp[n-1]+dp[n-3]+f1[n-3]+f5[n-3]+f3[n-3]+f6[n-3]
=dp[n-1]+dp[n-3]+f1[n-4]+f5[n-4]+f3[n-4]+f6[n-4]+f2[n-4]+f4[n-4]
=dp[n-1]+dp[n-3]+dp[n-4]
#include <cstdio>
int N;
int dp[];
int main(){
scanf("%d",&N); dp[]=; dp[]= ;dp[]=; dp[]=;
for(int i=;i<=N;++i) dp[i]=(dp[i-]%+dp[i-]%+dp[i-]%)%;
printf("%d",dp[N]);
return ;
}
【OpenJudge9270】【Pku2440】【递推】DNA的更多相关文章
- 【BZOJ-2476】战场的数目 矩阵乘法 + 递推
2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ...
- 从一道NOI练习题说递推和递归
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...
- Flags-Ural1225简单递推
Time limit: 1.0 second Memory limit: 64 MB On the Day of the Flag of Russia a shop-owner decided to ...
- 利用Cayley-Hamilton theorem 优化矩阵线性递推
平时有关线性递推的题,很多都可以利用矩阵乘法来解决. 时间复杂度一般是O(K3logn)因此对矩阵的规模限制比较大. 下面介绍一种利用利用Cayley-Hamilton theorem加速矩阵乘法的方 ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- 简单递推 HDU-2108
要成为一个ACMer,就是要不断学习,不断刷题...最近写了一些递推,发现递推规律还是挺明显的,最简单的斐波那契函数(爬楼梯问题),这个大家应该都会,看一点稍微进阶了一点的,不是简单的v[i] = v ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
- 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式
矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b * A B = a*A+b*C a*c+b*D c d ...
- openjudge1768 最大子矩阵[二维前缀和or递推|DP]
总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...
- 02python算法-递推
递推 1什么是递推?:根据已有节点的值,以及规律推出之后节点的值 2为什么要用递推:简单的解决有规矩事件 3怎么用?: 我们举个经典的例子: 如果1对兔子每月能生1对小兔子,而每对小兔在它出生后的第3 ...
随机推荐
- response.getWriter().write()和 response.getWriter().print()的区别
异步上传图片的代码.发现里面用了response.getWriter().print(),故联想到response.getWriter().writer(),经过一番api的查找与实操,总结如下: r ...
- 无缝衔接demo
如题. <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" con ...
- python3使用xlrd、xlwt、xlutils、openpyxl、xlsxwriter操作excel
特色简介 xlrd主要用来读excel,针对.xls格式: xlwt主要用来写excel,针对.xls格式,超出excel 的单格内容长度上限32767,就会报错: xlutils结合xlrd可以达到 ...
- [收集]关于MSSQL数据库的一些查询
sqlserver快速查找所有存储过程中是否包含某字符 --将XXXX替换成你要查找的内容 select name from sysobjects o, syscomments s where o.i ...
- C++中delete和delete[]的区别(转)
原文链接:http://www.cnblogs.com/charley_yang/archive/2010/12/08/1899982.html 一直对C++中的delete和delete[]的区别不 ...
- 使用js获取url里的指定参数
String.prototype.getQuery = function(name){ var reg = new RegExp("(^|&)"+ name +&q ...
- 数据库SQL实战(1)
1.查找最晚入职员工的所有信息: CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, ` ...
- linux命令(25):ln命令
命令格式: ln [参数][源文件或目录][目标文件或目录] 必要参数: -b 删除,覆盖以前建立的链接 -d 允许超级用户制作目录的硬链接 -f 强制执行 -i 交互模式,文件存在则提示用户是否覆盖 ...
- HDU-3065
病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- Java AQS学习
参考原文: Java并发之AQS详解 <Java并发编程的艺术> AQS 概述 AQS简介 AQS(AbstractQueuedSynchronizer)就是一个抽象的队列同步器,它是用来 ...