01-K Code
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 728 Accepted Submission(s): 209
Problem Description
Consider a code string S of N symbols, each symbol can only be 0 or 1. In any consecutive substring of S, the number of 0's differs from the number of 1's by at most K. How many such valid code strings S are there?
For example, when N is 4, and K is 3, there are two invalid codes: 0000 and 1111.
Input
The input consists of several test cases. For each case, there are two positive integers N and K in a line.
N is in the range of [1, 62].
K is in the range of [2, 5].
Output
Output the number of valid code strings in a line for each case.
Sample Input
Sample Output
2
14
//有一个长为 i 的 0-1 组成的序列,问任意连续长的子序列 0 1 数量差都不超过 m 的情况多少种
// dp[i][j][k] 意思是长为 i 的序列中 0 比 1 最多多 j 个,且长为 i 的序列中 1 比 0 最多多 k 个这样的序列的个数
所以 j,k最小为 0
dp [i][j][k] = dp[i-1][max(0,j-1)][k+1] // 填 1
+dp[i-1][j+1][max(0,k-1)] // 填 0
#include <bits/stdc++.h>
using namespace std;
#define LL long long int n,m;
LL dp[][][]; //长为 i 的序列,0比1最多多 j 个,且1比0最多多 k 个 int main()
{
while (scanf("%d%d",&n,&m)!=EOF)
{
memset(dp,,sizeof(dp));
dp[][][]=;
for (int i=;i<=n;i++)
{
for (int j=;j<=m;j++)
{
for (int k=;k<=m;k++)
{
dp[i+][j+][max(k-,)]+=dp[i][j][k]; // 下一个数是 0
dp[i+][max(j-,)][k+]+=dp[i][j][k]; // 下一个数是 1
}
}
}
LL ans = ;
for (int i=;i<=m;i++)
for (int j=;j<=m;j++)
ans += dp[n][i][j];
printf("%lld\n",ans);
}
return ;
}
01-K Code的更多相关文章
- 机器学习随笔01 - k近邻算法
算法名称: k近邻算法 (kNN: k-Nearest Neighbor) 问题提出: 根据已有对象的归类数据,给新对象(事物)归类. 核心思想: 将对象分解为特征,因为对象的特征决定了事对象的分类. ...
- 【BZOJ-2427】软件安装 Tarjan + 树形01背包
2427: [HAOI2010]软件安装 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 960 Solved: 380[Submit][Status ...
- POJ 2182 Lost Cows (求序列第k大)
题解 二分+树状数组 显然最和一个数的值就是rank 那么其它数有什么规律? 从后往前匹配rank,我们可以发现第i个数的rank为还没有匹配的rank第(a[i]+1)大的数 这可以用 树状数组+二 ...
- Brainf**k(一位数求max)
题目大意:给你两个一位数,要你求出其中的较大值(使用$Brainf**k$) ($Brainf**k$简介,相当于有一个数组和一个指针,","为把数组当前位赋值为读入的数,&quo ...
- HDU 4285 circuits( 插头dp , k回路 )
circuits Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- loj #6247. 九个太阳 k次单位根 神仙构造 FFT求和原理
LINK:九个太阳 不可做系列. 构造比较神仙. 考虑FFT的求和原理有 \(\frac{1}{k}\sum_{j=0}^{k-1}(w_k^j)^n=[k|n]\) 带入这道题的式子. 有\(\su ...
- HDU 4113 Construct the Great Wall(插头dp)
好久没做插头dp的样子,一开始以为这题是插头,状压,插头,状压,插头,状压,插头,状压,无限对又错. 昨天看到的这题. 百度之后发现没有人发题解,hust也没,hdu也没discuss...在acm- ...
- hihoCoder挑战赛25
萌新第一次打hihoCoder的比赛有点慌 T1 T1并不是特别难想到dp就好做了 显而易见的是一个01背包问题 Code: #include <cstdio> #include < ...
- 插头DP专题
建议入门的人先看cd琦的<基于连通性状态压缩的动态规划问题>.事半功倍. 插头DP其实是比较久以前听说的一个东西,当初是水了几道水题,最近打算温习一下,顺便看下能否入门之类. 插头DP建议 ...
- HDU 1693 Eat the Trees(插头DP、棋盘哈密顿回路数)+ URAL 1519 Formula 1(插头DP、棋盘哈密顿单回路数)
插头DP基础题的样子...输入N,M<=11,以及N*M的01矩阵,0(1)表示有(无)障碍物.输出哈密顿回路(可以多回路)方案数... 看了个ppt,画了下图...感觉还是挺有效的... 参考 ...
随机推荐
- 绘制 SVG
工具网址:http://svg123.com/ 画布 点击画布,在页面的右侧我们可以调整画布属性 点击属性,滚动滑轮可以微调 或者直接双击修改属性值 工具栏 左侧工具栏 就像画图的工具栏一样 形状库 ...
- lodash kebabCase
_.kebabCase([string='']) 转换字符串为 kebab case. _.kebabCase('Foo Bar'); // => 'foo-bar' _.kebabCase(' ...
- 【Python 数据分析】pandas模块
上一节,我们已经安装了numpy,基于numpy,我们继续来看下pandas pandas用于做数据分析与数据挖掘 pandas安装 使用命令 pip install pandas 出现上图表示安装成 ...
- hadoop english
for the same 同样previously 之前地overlay v. 覆盖; 镀金variable expansion 变量替换processed for 处理 entry(entries) ...
- flask-Migrate模块
功能 flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的. 官方文档:http://flask-migrate.readthedocs.io/en/latest/ 安装 p ...
- 向 mysql 插入汉字时报错 Incorrect string value: '\xE6\x9B\xB9\xE5\x86\xAC...' for col....
Incorrect string value: '\xE6\x9B\xB9\xE5\x86\xAC...' for column 'realname' at row 1 该情况一般是由数据库设计时的编 ...
- PHP-深入理解Opcode缓存
1.什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode).Opcode cache的目地是避免重复编译, ...
- 使用Google Https搜索
一. 将浏览器Google的默认搜索使用https 1. IE浏览器 进入注册表搜索"google.com"将搜索替换成https://www.google.com.hk 2. F ...
- 嵌入式实时操作系统Nucleus PLUS综述
近些年来,随着嵌入式系统飞速的发展.嵌入式实时操作系统广泛地应用在制造工业.过程控制.通讯.仪器仪表.汽车.船舶.航空航天.军事.装备.消费类产 品等方面. Nucleus PLUS 是为实时嵌入式应 ...
- ECMAScript运算符
一元运算符 delete value 删除元素的值 void() 这个经常被使用,用来转换函数的返回值为undefined,这样就不会将返回值输出到屏幕了! 如下: <a href=" ...