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,求最小代价和. [解题方法] 将筷子按长度从大到小排序 排序原因: 由 ...
随机推荐
- 学习KnockOut第三篇之List
学习KnockOut第三篇之List 欲看此篇---------------------------------------------可先看上篇. 第一步,先搭建一个大概的框架起来 ...
- Careercup - Google面试题 - 5205167846719488
2014-05-03 23:35 题目链接 原题: For a given node in binary search tree find a next largest number in searc ...
- div 布局2
转:http://www.kwstu.com/ArticleView/divcss_2013929173533658 关于DIV+CSS布局中用到的CSS必备知识请看:http://www.kwstu ...
- C++文件操作之get/getline
问题描述: C++ 读取写入文件,其中读取文件使用get和getline方式 参考资料: http://simpleease.blog.163.com/blog/stat ...
- 【娱乐】高端小游戏Manufactoria
Manufactoria 是一款游戏.游戏中,一家生产机器人的工厂内部出了一 些问题,生产出来的机器人有很多不合格的.一个机器人可以用一个含有红色和 蓝色的颜色串来描述,只有颜色串符合某种规律的机器人 ...
- asynDBCenter(修改)
asynDBCenter加入数据库心跳,其实是没有找到更好的方法,看看和以前有什么不同 mongo数据库重练,暂时没有找到好办法,只能这样定时访问 bool asynDBCenter::init(bo ...
- jQuery.validate errorPlacement
在被验证的控件的后一个元素控制显示 errorPlacement: function(error, element) { element.next().css("color",&q ...
- [转载]Spring Beans Auto-Wiring
Autowiring Modes You have learnt how to declare beans using the <bean> element and inject < ...
- 主题:PageRank解释
转自:http://www.iteye.com/topic/95079 PageRank解释 通过对由超过 50,000 万个变量和 20 亿个词汇组成的方程进行计算,PageRank 能够对网页的重 ...
- POJ 3468 A Simple Problem with Integers(线段树区间更新,模板题,求区间和)
#include <iostream> #include <stdio.h> #include <string.h> #define lson rt<< ...