Adjacent Bit Counts

4557 Adjacent Bit Counts
For a string of n bits x 1 , x 2 , x 3 ,..., x n , the adjacent bit count of the string (AdjBC(x)) is given by
x 1 ∗ x 2 + x 2 ∗ x 3 + x 3 ∗ x 4 + . . . + x n−1 ∗ x n
which counts the number of times a 1 bit is adjacent to another 1 bit. For example:
AdjBC(011101101) = 3
AdjBC(111101101) = 4
AdjBC(010101010) = 0
Write a program which takes as input integers n and k and returns the number of bit strings x of n
bits (out of 2 n ) that satisfy AdjBC(x) = k. For example, for 5 bit strings, there are 6 ways of getting
AdjBC(x) = 2:
11100, 01110, 00111, 10111, 11101, 11011
Input
The first line of input contains a single integer P , (1 ≤ P ≤ 1000), which is the number of data sets that
follow. Each data set is a single line that contains the data set number, followed by a space, followed by
a decimal integer giving the number (n) of bits in the bit strings, followed by a single space, followed by
a decimal integer (k) giving the desired adjacent bit count. The number of bits (n) will not be greater
than 100 and the parameters n and k will be chosen so that the result will fit in a signed 32-bit integer.
Output
For each data set there is one line of output. It contains the data set number followed by a single space,
followed by the number of n-bit strings with adjacent bit count equal to k.
Sample Input
10
1 5 2
2 20 8
3 30 17
4 40 24
5 50 37
6 60 52
7 70 59
8 80 73
9 90 84
10 100 90
Sample Output
1 6
2 63426
3 1861225
4 168212501
5 44874764
6 160916
7 22937308
8 99167
9 15476
10 23076518

题意:给你一个长为n的串,且仅有0和1组成,x 1 ∗ x 2 + x 2 ∗ x 3 + x 3 ∗ x 4 + . . . + x n−1 ∗ x n 这样计算的值等于k,问该字符串有多少种这样的组合?

分析:用动态规划的思想,假如dp[i][j][k]表示组合数,i表示字串长度,j表示该串价值,k表示最后一个字符只能为1和0。

dp[i][j][0],有i个字符,价值为j,最后一位为0,这样的组合数等于长度为i-1,价值为j,最后一位为0的组合数加上长度为i-1,价值为j,最后一位为1的组合数,即dp[i][j][0]=dp[i-1][j][0]+dp[i-1][j][1]。

dp[i][j][1],有i个字符,价值为j,最后一位为1,这样的组合数等于长度为i-1,价值为j,最后一位为0的组合数加上长度为i-1,价值为j-1,最后一位为1的组合数,即dp[i][j][1]=dp[i-1][j][0]+dp[i-1][j-1][1]。

总结下来状态转移方程即是:

dp[i][j][0]=dp[i-1][j][0]+dp[i-1][j][1]

dp[i][j][1]=dp[i-1][j][0]+dp[i-1][j-1][1]

再说说初始化

长度为1的时候,没有其他的数和它相乘,所以价值只能为0

dp[1][0][0]=1;长度为1价值为0且最后一位为0的组合数只有1种,比如0

dp[1][0][1]=1;长度为1价值为0且最后一位为1的组合数只有1种,比如1

看了别人题解,都说这是很简单的动规,佩服佩服

 #include<cstdio>
#include<algorithm>
using namespace std;
int dp[][][];//dp定义为全局变量
void find_(){
dp[][][]=dp[][][]=;//初始化
for(int i=;i<;i++){//每一个长度时,都需要初始化一遍
dp[i][][]=dp[i-][][]+dp[i-][][];
dp[i][][]=dp[i-][][];
for(int j=;j<i;j++){//长度为i时,价值最多为i-1
dp[i][j][]=dp[i-][j][]+dp[i-][j][];
dp[i][j][]=dp[i-][j][]+dp[i-][j-][];
}
}
}
int main() {
int p;
find_();
scanf("%d",&p);
while(p--) {
int n,a,b;
scanf("%d %d %d",&n,&a,&b);
printf("%d %d\n",n,dp[a][b][]+dp[a][b][]);
}
return ;
} CUTECode

Adjacent Bit Counts(01组合数)的更多相关文章

  1. BNU4286——Adjacent Bit Counts——————【dp】

    Adjacent Bit Counts Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Jav ...

  2. POJ 3786 dp-递推 Adjacent Bit Counts *

    Adjacent Bit Counts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 599   Accepted: 502 ...

  3. nyoj 715 Adjacent Bit Counts

    描述 For a string of n bits x1, x2, x3, …, xn,  the adjacent bit count of the string  is given by      ...

  4. Adjacent Bit Counts(uvalive)

    For a string of n bits x1, x2, x3,…, xn, the adjacent bit count of the string (AdjBC(x)) is given by ...

  5. Adjacent Bit Counts(动态规划 三维的)

    /** 题意: 给出一个01串 按照题目要求可以求出Fun(X)的值 比如: 111 Fun(111)的值是2: 输入: t (t组测试数据) n k (有n位01串 Fun()的值为K) 输出:有多 ...

  6. POJ 3786 Adjacent Bit Counts (DP)

    点我看题目 题意 :给你一串由1和0组成的长度为n的数串a1,a2,a3,a4.....an,定义一个操作为AdjBC(a) = a1*a2+a2*a3+a3*a4+....+an-1*an.输入两个 ...

  7. 河南省第六届ACM程序设计大赛

    C:  最舒适的路线 (并查集) #include<cstdio> #include<cstring> #include<iostream> #include< ...

  8. Week__8

    Monday_ 今晚补了扔鸡蛋问题的动态规划问题,补了这道题,感觉视野又开阔了些. 写了一道思维题cf 1066A 数字逻辑后半节听得打脑壳,现在很晚了,明天再看叭. Tuesday_ 今晚补了 ad ...

  9. 方程的解_NOI导刊2010提高(01) 组合数

    题目描述 佳佳碰到了一个难题,请你来帮忙解决. 对于不定方程a1+a2+…+ak-1+ak=g(x),其中k≥2且k∈N,x是正整数,g(x)=x^x mod 1000(即x^x除以1000的余数), ...

随机推荐

  1. logback-spring.xml 博客分享

    https://juejin.im/post/5b51f85c5188251af91a7525

  2. 支付宝电脑支付沙箱配置(JAVA)

    支付宝电脑支付API地址:https://docs.open.alipay.com/270/105899/.支付宝提供了沙箱环境提供测试,具体配置步骤如下 1.先下载测试DEMO工程 下载地址:htt ...

  3. Ajax之Json对象序列化传参

    前端部分:传入参数 "groupObject" : jsonString //对象序列化传参 var projectGroup = {}; projectGroup["i ...

  4. python2.7安装pip遇到ImportError: cannot import name HTTPSHandle

    python2.7,报错如下: Traceback (most recent call last): File "/usr/local/bin/pip", line 9, in & ...

  5. 熟悉基本的Linux文件系统命令

      修改配置是以后工作中必然经历的,要做好基础工作,两天的学习也说明了在Linux系统中修改配置的重要性,多看多学习. 每周总结学习和经验到网站上,坚持1w个小时,加油! Linux的安装环境 cen ...

  6. java-Collection集合、List集合、Vector集合和迭代器Iterator、ListIterator的使用

    1.对象数组的概述和使用 * A:案例演示 * 需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息. * Student[] arr = new Student ...

  7. python while循环案例

    1.while循环语句基本结构? while condition: loop body 2.利用while语句写出猜大小的游戏: 设定一个理想数字比如:66,让用户输入数字,如果比66大,则显示猜测的 ...

  8. BSGS模板(慢速)

    //author Eterna #define Hello the_cruel_world! #pragma GCC optimize(2) #include<iostream> #inc ...

  9. java_oop_方法2

    基本和引用数据类型    存储方式    数据类型总结 jvm运行时数据区域        方法区        虚拟机栈!        本地方法栈        堆!        程序计数器 虚 ...

  10. ILBC 规范 2

    接上篇 <ILBC 规范>  https://www.cnblogs.com/KSongKing/p/10354824.html  , ILBC    的 目标 是    跨平台  跨设备 ...