K - Painful Bases 状压dp
Painful Bases
这个题目一开始看,感觉有点像数位dp,但是因为是最多有16进制,因为限制了每一个数字都不同最多就有16个数。
所以可以用状压dp,看网上题解是
dp[s][r] 表示数字集合为s,对 k 取余为r的方案数。
这个题目首先把给你的字符转化成数字,然后枚举状态,枚举模数,枚举每一位的所有可能。
这个注意是写离散化的,不是直接暴力,虽然理论上都会超时,但是实际上离散化的没有超时。
这个题目我觉得还挺好的,以后可以在写写
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
typedef long long ll;
ll dp[ << ][];
char s[];
int num[]; int main()
{
int t;
scanf("%d", &t);
for(int cas=;cas<=t;cas++)
{
int base, k;
scanf("%d%d", &base, &k);
scanf("%s", s + );
int len = strlen(s + );
for(int i=;i<=len;i++)
{
if (s[i] <= ''&&s[i] >= '') num[i] = s[i] - '';
else num[i] = + s[i] - 'A';
}
memset(dp, , sizeof(dp));
dp[][] = ;
for(int i=;i<(<<len);i++)
{
for(int mod=;mod<k;mod++)
{
if (dp[i][mod] == ) continue;
for(int id=;id<=len;id++)
{
int tmp = ( << (id-));
if ((tmp | i) == i) continue;
tmp |= i;
dp[tmp][(mod*base + num[id]) % k] += dp[i][mod];
}
}
}
printf("Case %d: %lld\n", cas,dp[( << len) - ][]);
}
return ;
}
状压dp
排列perm
这个题目和上面的差不多,有一个小地方注意一下,就是这个有相同的所以要除去。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
#define sum 1<<10
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int maxn = 4e5 + ;
ll dp[ << ][];
int a[maxn];
int vis[];
char s[maxn]; int main() {
int t;
scanf("%d", &t);
while (t--) {
int d;
scanf("%s%d", s + , &d);
memset(vis, , sizeof(vis));
int len = strlen(s + );
int tmp = ;
for (int i = ; i <= len; i++) {
a[i] = s[i] - '';
tmp |= ( << a[i]);
vis[a[i]]++;
}
ll ans = ;
for(int i=;i<=;i++)
{
if(vis[i])
{
for(int j=;j<=vis[i];j++)
{
ans *= j;
}
}
}
memset(dp, , sizeof(dp));
dp[][] = ;
for (int i = ; i < ( << len); i++) {
for (int mod = ; mod < d; mod++) {
if (dp[i][mod] == ) continue;
for (int j = ; j <= len; j++) {
int tmp1 = ( << (j - ));
if ((tmp1 | i) == i) continue;
tmp1 |= i;
dp[tmp1][(mod * + a[j]) % d] += dp[i][mod];
}
}
}
printf("%lld\n", dp[(<<len)-][]/ans);
}
return ;
}
状压
K - Painful Bases 状压dp的更多相关文章
- Codeforces Gym 100610 Problem K. Kitchen Robot 状压DP
Problem K. Kitchen Robot Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10061 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP
[BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...
- 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP
[BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...
- 【BZOJ1087】 [SCOI2005]互不侵犯King 状压DP
经典状压DP. f[i][j][k]=sum(f[i-1][j-cnt[k]][k]); cnt[i]放置情况为i时的国王数量 前I行放置情况为k时国王数量为J #include <iostre ...
随机推荐
- shell执行${var:m:n}报错Bad substitution解决办法
Ubuntu系统下,执行字符串截取脚本时,总是报错:Bad substitution,脚本非常简单如下: #!/bin/sh str1="hello world!" :} 执行后报 ...
- AJ学IOS 之微博项目实战(13)发送微博调用相机里面的图片以及调用相机
AJ分享,必须精品 一:效果 二:代码 相机部分就简单多了,几行代码调用而已,但是如果你要是想实现更多丰富的功能,需要自己写.利用AssetsLibrary.framework,利用这个框架可以获得手 ...
- Git应用详解第十讲:Git子库:submodule与subtree.md
前言 前情提要:Git应用详解第九讲:Git cherry-pick与Git rebase 一个中大型项目往往会依赖几个模块,git提供了子库的概念.可以将这些子模块存放在不同的仓库中,通过submo ...
- Eight HDU - 1043 (双向BFS)
记得上人工智能课的时候老师讲过一个A*算法,计算估价函数(f[n]=h[n]+g[n])什么的,感觉不是很好理解,百度上好多都是用逆向BFS写的,我理解的逆向BFS应该是从终点状态出发,然后把每一种状 ...
- Rescue BFS+优先队列 杭电1242
思路 : 优先队列 每次都取最小的时间,遇到了终点直接就输出 #include<iostream> #include<queue> #include<cstring> ...
- 对短路变形POJ3615
Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the gang are ...
- HTML+CSS教程(一)简介及其基本标签的使用方法
一.前端 HTML(结构):HyPer TEXT Markup LanguageCSS(样式): 样式就是对于结构的一种美化JavaScript(js: 行为/ 提供了用户和界面的交互方式)jQuer ...
- 关于go的init函数
亲测,如果加载一个包,如果一个包里的每个文件,均含有init函数,那么均会执行. 目前来看,init的执行顺序,是文件名称的自然排序进行执行的. 并且只是所加载包里的go文件的init函数执行,对于包 ...
- Go语言: 万物皆异步
来源:https://www.jianshu.com/p/62c0cd107da3 同步和异步.阻塞和非阻塞 首先要明确的是,同步(Synchronous)和异步(Asynchronous),阻塞(B ...
- thinkphp--create()的使用方法(个人感悟)
M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...