1363: Count 101 (经典数位dp)
1363: Count 101
Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 393 Solved: 154
Description
You know YaoYao is fond of his chains. He has a lot of chains and each chain has n diamonds on it. There are two kinds of diamonds, labeled 0 and 1. We can write down the label of diamonds on a chain. So each chain can be written as a sequence consisting of 0 and 1.
We know that chains are different with each other. And their length is exactly n. And what’s more, each chain sequence doesn’t contain “101” as a substring.
Could you tell how many chains will YaoYao have at most?
Input
There will be multiple test cases in a test data. For each test case, there is only one number n(n<10000). The end of the input is indicated by a -1, which should not be processed as a case.
Output
For each test case, only one line with a number indicating the total number of chains YaoYao can have at most of length n. The answer should be print after module 9997.
Sample Input
3
4
-1
Sample Output
7
12
Hint
We can see when the length equals to 4. We can have those chains:
0000,0001,0010,0011
0100,0110,0111,1000
1001,1100,1110,1111
不能出现101,问你这样序列的个数
数位dp
可以由很多dp方式,比如三维dp
做过一个非常类似的题
dp1[i]:表示长度为i的满足要求的(不出现101)的以0结尾的方案数
dp2[i]:表示长度为i的满足要求的(不出现101)的以1结尾的方案数目
dp3[i]:表示长度为i的满足要求的以(1或者0)结尾的方案数目
dp1:
想一下dp1[i]的含义(以0结尾)
因为题目要求是没有101
所以对dp1,第i位置
前面的第i-1位置可以是0,可以是1
所以:dp1[i]=dp1[i-1]+dp2[i-1]
想一下dp2[i]的含义(以1结尾)
题目要求没有101
对dp2的第i位置
所以肯定第i位置肯定是1(dp2的含义)
所以前面的第i-1个位置也只能是1
前面的第i-2个位置也只能是0
这样才不会有101出现
所以:
dp2[i]=dp2[i-1]+dp1[i-2]
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<algorithm>
#include<memory.h>
#include<memory>
using namespace std;
#define max_v 10005
#define mod 9997
int dp1[max_v];
int dp2[max_v];
int dp3[max_v];
int main()
{
dp1[]=;
dp1[]=; dp2[]=;
dp2[]=; dp3[]=dp1[]+dp2[];
dp3[]=dp1[]+dp2[];
for(int i=;i<;i++)
{
dp1[i]=(dp1[i-]+dp2[i-])%mod;
dp2[i]=(dp1[i-]+dp2[i-])%mod;
dp3[i]=(dp1[i]+dp2[i])%mod;
} int n;
while(~scanf("%d",&n))
{
if(n<)
break;
printf("%d\n",dp3[n]);
}
return ;
}
/*
给你长度为n的序列,只能由0或者1组成
不能出现101,问你这样序列的个数 分析:
数位dp
可以由很多dp方式,比如三维dp
做过一个非常类似的题
dp1[i]:表示长度为i的满足要求的(不出现101)的以0结尾的方案数
dp2[i]:表示长度为i的满足要求的(不出现101)的以1结尾的方案数目
dp3[i]:表示长度为i的满足要求的以(1或者0)结尾的方案数目 dp3[i]=dp1[i]+dp2[i]; 所以我们只需要得的dp1和dp2的转移方程
dp1:
想一下dp1[i]的含义(以0结尾)
因为题目要求是没有101
所以对dp1,第i位置
前面的第i-1位置可以是0,可以是1
所以:dp1[i]=dp1[i-1]+dp2[i-1] dp2:
想一下dp2[i]的含义(以1结尾)
题目要求没有101
对dp2的第i位置
所以肯定第i位置肯定是1(dp2的含义)
所以前面的第i-1个位置也只能是1
前面的第i-2个位置也只能是0
这样才不会有101出现
所以:
dp2[i]=dp2[i-1]+dp1[i-2] 所以通过dp1和dp2,我们就可以知道dp3了 注意:记得dp的初始化 其实还可以用斐波那契写,听学弟说的.... */
1363: Count 101 (经典数位dp)的更多相关文章
- 【BZOJ-1833】count数字计数 数位DP
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 2494 Solved: 1101[Submit][ ...
- uva 10712 - Count the Numbers(数位dp)
题目链接:uva 10712 - Count the Numbers 题目大意:给出n,a.b.问说在a到b之间有多少个n. 解题思路:数位dp.dp[i][j][x][y]表示第i位为j的时候.x是 ...
- hdu 3943 经典数位dp好题
/* 题意:求出p-q的第j个nya数 数位dp,求出p-q的所有nya数的个数很好求,但是询问求出最终那个第j个值时是我不会求了看了下别人的思路 具体就是把p-q的第j个转化成0-q的第low+j个 ...
- bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)
1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...
- bzoj1833: [ZJOI2010]count 数字计数 数位dp
bzoj1833 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. O ...
- 1833: [ZJOI2010]count 数字计数——数位dp
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1833 省选之前来切一道裸的数位dp.. 题意 统计[a,b]中0~9每个数字出现的次数(不算 ...
- [bzoj1833][ZJOI2010]count 数字计数——数位dp
题目: (传送门)[http://www.lydsy.com/JudgeOnline/problem.php?id=1833] 题解: 第一次接触数位dp,真的是恶心. 首先翻阅了很多很多一维dp,因 ...
- HDU 4588 Count The Carries 数位DP || 打表找规律
2013年南京邀请赛的铜牌题...做的非常是伤心.另外有两个不太好想到的地方.. ..a 能够等于零,另外a到b的累加和比較大.大约在2^70左右. 首先说一下解题思路. 首先统计出每一位的1的个数, ...
- 【JZOJ3624】【SDOI2014】数数(count) AC自动机+数位dp
题面 100 容易想到使用AC自动机来处理禁忌子串的问题: 然后在自动机上数位dp,具体是: \(f_{i,j,0/1}\)表示填了\(i\)位,当前在自动机的第\(j\)个结点上,\(0\)表示当前 ...
随机推荐
- 强网杯2018 pwn复现
前言 本文对强网杯 中除了 2 个内核题以外的 6 个 pwn 题的利用方式进行记录.题目真心不错 程序和 exp: https://gitee.com/hac425/blog_data/blob/m ...
- memcached 的 SockIOPool 概念
池的概念 SockIOPool 首先来看下属性 SockIOPool属性 boolean initialized = false – 初始化是否完成的标志,只有初始化完成后上层才能正常使用池 int ...
- Pig模式
Pig中的模式可以是用户显示声明的,也可以是Pig通过用户的使用方式猜测的. Pig对模式的认知在Pig Latin脚本执行的不同阶段可能是不同的. 下面的语句,用户显示声明了模式:3个字段, ...
- SQLSERVER数据库备份操作和还原操作做了什么
SQLSERVER数据库备份操作和还原操作做了什么 看了这篇文章:还原/备份时做了些什么 自己也测试了一下,下面说的错误日志指的是SQLSERVER ERRORLOG 一般在C:\Program Fi ...
- tshark----wireshark的命令行工具
tshark - 转储和分析网络流 概要 tshark的 [ -2 ] [ -a <捕捉自动停止条件>] ... [ -b <捕捉环形缓冲区选项>] ... [ ...
- [翻译] BezierString
BezierString https://github.com/lvnyk/BezierString Rendering NSAttributedStrings along arbitrary con ...
- Oracle恢复删除数据
可以通过SCN和时间戳两种方法来恢复. 一.通过SCN恢复删除且已经提交的数据 查询当前SCN select current_scn from v$database; 如图: 缩小范围进行查询 查询到 ...
- CentOS服务器的加固方案
>>>Centos账户安全 对Centos的加固首先要控制用户的权限,用户权限主要涉及到/etc下的/passwd,/shadow和/group三个文件 /passwd文件主要是存储 ...
- Hadoop HBase概念学习系列之HBase的Shell(步骤非常清晰)(二十四)
这部分知识点,是必须要熟练玩转的! 见 5 hbase-shell + hbase的java api 的进入HBase Shell 强烈建议,先看我上面的这篇博文,是实实际际的步骤. 另外,附上一 ...
- Ardunio控制RGB的LED灯显示彩虹渐变色.
由于我使用的是共阴极的RGB LED,如果你的是共阳极的,接线的时候要注意一下. 其他没什么不同 //定义RGB色彩的输出I/O ; ; ; //标记颜色变化的方式,增加值还是减小值 bool red ...