题意:给你n、k,问你有多少个n为二进制的数(无前导零)的0与1一样多,且是k的倍数

题解:对于每个k都计算一次dp,dp[i][j][kk][l]表示i位有j个1模k等于kk且第一位为l(0/1)

   再次预处理mod[i][j]表示1的i次方模j等于几,具体看代码注释

   

import java.util.Scanner;

public class Main{
static int Maxn=65;
static int Maxk=101;
//前i个数有j个1模给定的值余k且第一位为1或者0的总个数
static long[][][][] dp = new long[Maxn][Maxn][Maxk][2];
//初始化1的i次方模j等于几
static int[][] Mod=new int[Maxn][Maxk]; //初始化
static void Init(){
for(int i=0;i<Maxn;++i){
for(int j=1;j<Maxk;++j){
Mod[i][j]=(int) ((1L << i)%j);
}
}
}
//按位dp求出当有n位是模kk等于0的总个数
static long Solve(int n,int kk){
if(kk==0||(n&1)==1)//特判
return 0L;for(int i=0;i<=n;++i)//初始化
for(int j=0;j<=i;++j)
for(int k=0;k<=kk;++k){
dp[i][j][k][0]=dp[i][j][k][1]=0L;
}
dp[0][0][0][0]=1L;
//每种dp的i位只与i-1位相关
for(int i=1;i<=n;++i){
//求i位有i/2个1时需要i-1位有i/2与i/2-1个1,但是再向前推就需要更多所以将出现所有可能个1的情况求出
for(int j=0;j<=i&&j<=n/2;++j){
//模kk等于所有k的情况都需要求出,用于下一次使用
for(int k=0;k<kk;++k){
//此位置放0
dp[i][j][k][0]+=dp[i-1][j][k][0]+dp[i-1][j][k][1];
//此位置放1,k就等于前一个是当前位置减去(1<<i-1)后再模kk的值
if(j>0){
dp[i][j][k][1]+=dp[i-1][j-1][(k+kk-Mod[i-1][kk])%kk][0]+dp[i-1][j-1][(k+kk-Mod[i-1][kk])%kk][1];//计算余数
} }
}
}
return dp[n][n/2][0][1];
}
public static void main(String[] args) {
int t,coun=0;
int n,k;
Init();
Scanner sc =new Scanner(System.in);
t=sc.nextInt();
while(t!=0){
n=sc.nextInt();
k=sc.nextInt();
System.out.println("Case "+(++coun)+": "+Solve(n,k));
t--;
} }
}

UVA 12063 Zeros and Ones(三维dp)的更多相关文章

  1. UVA 12063 Zeros and Ones

    https://vjudge.net/problem/UVA-12063 题意: 统计n为二进制数中,0和1相等且值为m的倍数的数有多少个 dp[i][j][k] 前i位二进制 有j个1 值模m等于k ...

  2. UVA 12063 Zeros and ones 一道需要好好体会的好题

    #include<bits/stdc++.h> #include<stdio.h> #include<iostream> #include<cmath> ...

  3. UVa 12063 (DP) Zeros and Ones

    题意: 找出长度为n.0和1个数相等.没有前导0且为k的倍数的二进制数的个数. 分析: 这道题要用动态规划来做. 设dp(zeros, ones, mod)为有zeros个0,ones个1,除以k的余 ...

  4. UVA 10163 Storage Keepers(两次DP)

    UVA 10163 Storage Keepers(两次DP) http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Ite ...

  5. 三维dp&codeforce 369_2_C

    三维dp&codeforce 369_2_C 标签: dp codeforce 369_2_C 题意: 一排树,初始的时候有的有颜色,有的没有颜色,现在给没有颜色的树染色,给出n课树,用m种燃 ...

  6. uva 11584 Partitioning by Palindromes 线性dp

    // uva 11584 Partitioning by Palindromes 线性dp // // 题目意思是将一个字符串划分成尽量少的回文串 // // f[i]表示前i个字符能化成最少的回文串 ...

  7. UVA - 825Walking on the Safe Side(dp)

    id=19217">称号: UVA - 825Walking on the Safe Side(dp) 题目大意:给出一个n * m的矩阵.起点是1 * 1,终点是n * m.这个矩阵 ...

  8. P1006 传纸条(二维、三维dp)

    P1006 传纸条 输入输出样例 输入 #1 复制 3 3 0 3 9 2 8 5 5 7 0 输出 #1 复制 34 说明/提示 [限制] 对于 30% 的数据,1≤m,n≤10: 对于 100% ...

  9. 紫书 习题 10-15 UVa 12063(数位dp)

    大佬真的强!!https://blog.csdn.net/u014800748/article/details/45225881 #include<cstdio> #include< ...

随机推荐

  1. use Properties objects to maintain its configuration Writing Reading System Properties 维护配置 系统变量

    System Properties (The Java™ Tutorials > Essential Classes > The Platform Environment) https:/ ...

  2. Ta-lib K线模式识别

    1, CDL2CROWS (Two Crows 两只乌鸦) 简介:三日K线模式,第一天长阳,第二天高开收阴,第三天再次高开继续收阴,收盘比前一日收盘价低,预示股价下跌. 例子:integer = CD ...

  3. 重点:怎样正确的使用QThread类(很多详细例子的对比,注意:QThread 中所有实现的函数是被创建它的线程来调用的,不是在线程中)good

    背景描述: 以前,继承 QThread 重新实现 run() 函数是使用 QThread唯一推荐的使用方法.这是相当直观和易于使用的.但是在工作线程中使用槽机制和Qt事件循环时,一些用户使用错了.Qt ...

  4. new Option() 创建一个option标签

    //add() 方法用于向 <select> 添加一个 <option> 元素. //new Option() 创建一个option标签 school.add(new Opti ...

  5. shipyard 中文版安装 -- Docker web管理

    #本文使用markdown文档格式 #Docker web管理平台 #shipyard 中文版安装 #hipyard可对容器.镜像.仓库.docker节点进行管理的web系统 #+++++++++++ ...

  6. Vuex、axios以及跨域请求处理

    一.Vuex 1.介绍 vuex是一个专门为Vue.js设计的集中式状态管理架构. 对于状态,我们把它理解为在data中需要共享给其他组件使用的部分数据. Vuex和单纯的全局对象有以下不同: 1. ...

  7. 需求用例分析之五:业务用例之Rational系

    版权声明:作者:张克强.未经作者允许不得转载. https://blog.csdn.net/zhangmike/article/details/28134897 作者:张克强    作者微博:张克强- ...

  8. EditText把回车键变成搜索

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/mingyue_1128/article/details/31376159 在xml文件里的EditT ...

  9. 0606-Zuul构建API Gateway-Zuul过滤器以及禁用Zuul过滤器

    一.概述 针对Spring Cloud的Zuul配备了许多在代理和服务器模式下默认启用的ZuulFilter bean. 有关启用的可能过滤器,请参阅zuul过滤器包. 二.Zuul过滤器使用 2.1 ...

  10. ECMAScript 6 学习资料

    ECMAScript 6入门 http://es6.ruanyifeng.com/ 30分钟掌握ES6/ES2015核心内容(上) 30分钟掌握ES6/ES2015核心内容(下)