UVa 12063 (DP) Zeros and Ones
题意:
找出长度为n、0和1个数相等、没有前导0且为k的倍数的二进制数的个数。
分析:
这道题要用动态规划来做。
设dp(zeros, ones, mod)为有zeros个0,ones个1,除以k的余数为mod的二进制数的个数,则状态转移方程为:
dp(zeros + 1, ones, (mod>>1) % k) += dp(zeros, ones, mod)
dp(zeros, ones + 1, ((mod>>1)+1) % k) += dp(zeros, ones, mod)
分别用记忆化搜索 和 递推的方式写了一遍,递推要比记忆化搜索快一半的时间。
#include <cstdio>
#include <cstring> int n, k;
long long d[][][]; long long dp(int zeros, int ones, int mod)
{
if(zeros + ones > n || zeros > n/ || ones > n/) return ;
if(d[zeros][ones][mod] != -) return d[zeros][ones][mod];
return d[zeros][ones][mod] = dp(zeros+, ones, (mod<<)%k) + dp(zeros, ones+, (((mod<<)%k)+)%k);
} int main()
{
//freopen("in.txt", "r", stdin); int T;
scanf("%d", &T);
for(int kase = ; kase <= T; ++kase)
{
scanf("%d%d", &n, &k); if(n % == || k == ) { printf("Case %d: 0\n", kase); continue; } memset(d, -, sizeof(d));
d[n/][n/][] = ;
printf("Case %d: %lld\n", kase, dp(, , )); } return ;
}
记忆化搜索
#include <cstdio>
#include <cstring> int n, k;
long long dp[][][]; int main()
{
//freopen("in.txt", "r", stdin); int T;
scanf("%d", &T);
for(int kase = ; kase <= T; ++kase)
{
scanf("%d%d", &n, &k); if(n % == || k == ) { printf("Case %d: 0\n", kase); continue; } n /= ;
memset(dp, , sizeof(dp)); dp[][][%k] = ;
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++)
for(int m = ; m < k; m++)
{
dp[i+][j][(m<<)%k] += dp[i][j][m];
dp[i][j+][((m<<)+)%k] += dp[i][j][m];
} printf("Case %d: %lld\n", kase, dp[n][n][]); } return ;
}
递推
UVa 12063 (DP) Zeros and Ones的更多相关文章
- UVA 12063 Zeros and Ones(三维dp)
题意:给你n.k,问你有多少个n为二进制的数(无前导零)的0与1一样多,且是k的倍数 题解:对于每个k都计算一次dp,dp[i][j][kk][l]表示i位有j个1模k等于kk且第一位为l(0/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 ...
- UVA 12063 Zeros and ones 一道需要好好体会的好题
#include<bits/stdc++.h> #include<stdio.h> #include<iostream> #include<cmath> ...
- 紫书 习题 10-15 UVa 12063(数位dp)
大佬真的强!!https://blog.csdn.net/u014800748/article/details/45225881 #include<cstdio> #include< ...
- uva 1401 dp+Trie
http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Uva 12063 Zero and Ones
给个链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- uva 11404 dp
UVA 11404 - Palindromic Subsequence 求给定字符串的最长回文子序列,长度一样的输出字典序最小的. 对于 [l, r] 区间的最长回文串.他可能是[l+1, r] 和[ ...
- uva 11552 dp
UVA 11552 - Fewest Flops 一个字符串,字符串每 k 个当作一组,组中的字符顺序能够重组.问经过重组后改字符串能够编程最少由多少块字符组成.连续的一段字符被称为块. dp[i][ ...
- uva 10271 (dp)
题意:有n个数据,给定k,要从中选出k+8个三元组(x,y,z,其中x<=y<=z),每选一次的代价为(x-y)^2,求最小代价和. [解题方法] 将筷子按长度从大到小排序 排序原因: 由 ...
随机推荐
- android studio 智能提示忽略大小写
Step1: Step2:
- html+css学习笔记 [基础1]
---------------------------------------------------------------------------------------------------- ...
- [CFgym]2015-2016 ACM-ICPC Pacific Northwest Regional Contest小结
*感谢两位浙江大佬带我飞 贴下成绩 div2 div1 *div2不是我打的上个厕所就5/11了 比赛小结 A [题目大意] 有n(n<=500)个机场,两两之间距离是g[i][j],每经停一个 ...
- MongoDB { code: 18, ok: 0.0, errmsg: "auth fails" } 原因
MongoDB出现 { code: 18, ok: 0.0, errmsg: "auth fails" } 错误的原因: 1.账号密码错误 2.账号不属于该数据库
- 在线最优化求解(Online Optimization)之一:预备篇
在线最优化求解(Online Optimization)之一:预备篇 动机与目的 在实际工作中,无论是工程师.项目经理.产品同学都会经常讨论一类话题:“从线上对比的效果来看,某某特征或因素对xx产品的 ...
- uva 10651
DP 主要是位运算的运用 因为只有12位 用一个数字代表一种装态 记忆化搜索 节约时间 /***************************************************** ...
- tomcat 解析(三)-启动框架
TOMCAT源码分析(启动框架)前言: 本文是我阅读了TOMCAT源码后的一些心得. 主要是讲解TOMCAT的系统框架, 以及启动流程.若有错漏之处,敬请批评指教!建议: 毕竟TOMCAT的框 ...
- IOS 中的MVC设计模式
- http://www.aboutyun.com/thread-8792-1-1.html
http://www.aboutyun.com/thread-8792-1-1.html
- http://blog.csdn.net/superhosts/article/details/15813247
http://blog.csdn.net/superhosts/article/details/15813247