Painful Bases LightOJ - 1021】的更多相关文章

Painful Bases LightOJ - 1021 题意:给出0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F中的一些字符(不重复)还有一个进制base,求这些字符的排列形成的base进制数中,有多少个能被k整除. 方法: 正常的做法: http://blog.csdn.net/chenzhenyu123456/article/details/51155038 自己的做法(常数很大,仅做记录): ans[i][S][j]表示i进制下,S集合中数字可用,总产生余数为j时方案数…
Painful Bases LightOJ - 1021 这个题目一开始看,感觉有点像数位dp,但是因为是最多有16进制,因为限制了每一个数字都不同最多就有16个数. 所以可以用状压dp,看网上题解是 dp[s][r] 表示数字集合为s,对 k 取余为r的方案数. 这个题目首先把给你的字符转化成数字,然后枚举状态,枚举模数,枚举每一位的所有可能. 这个注意是写离散化的,不是直接暴力,虽然理论上都会超时,但是实际上离散化的没有超时. 这个题目我觉得还挺好的,以后可以在写写 #include <io…
1021 - Painful Bases   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB As you know that sometimes base conversion is a painful task. But still there are interesting facts in bases. For convenience let's assume that we are d…
题目链接:http://lightoj.com/volume_showproblem.php?problem=1021 #include<cstring> #include<cstdio> #include<algorithm> #include<iostream> using namespace std; <<; const int INF = 0x3f3f3f3f; ]; //dp[i][j]表示数字集合为i(数位i上为1,代表第i个数取了)…
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1021 题解:简单的数位dp由于总共就只有16个存储一下状态就行了.求各种进制能否整除k模仿10进制就行. #include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; typedef long long ll;…
题目大意: 给你一个base 进制的数字,把这个数字的每一位进行全排列,问有多少个数字是可以整除k的. 题目解析: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<queue> #include<vector> #include<map> using namesp…
题意:  给一个B进制的数,一个10进制的数K,B进制数有x位, 对着x位进行全排列的话,有x!种可能, 问这x!的可能中,有多少种可以整除K,各个位置上的数字都不同. 思路:状态压缩,数位DP #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<vector> #include<set&…
容易想到状态dp[n][S][m](S是数字出现的集合),表示前n位用了数字集S且模k余数是m的方案数. 利用 (xy)base % k = ( x*base+y ) % k = (( x%k ) * base + y) % k ,进行状态第三维的转移. 不过d[16][216][20]有2000多W的状态数,且不说超时的问题,内存早已超过限制了. 可以发现,S这一维其实就包含了n这一维的信息了,所以只要二维就能表示状态. dp[m][S]表示,数字集为s且模k余数为m的方案数 状态的转移,从前…
题意:给你一个b进制的数,再给你一个十进制数k,你可以重新排列b进制数的每一位得到其他b进制数,问你这些数中有多少可以整除k? 思路:数位dp. #include <cstdio> #include <string> #include <cstring> #include <iostream> #include <algorithm> using namespace std; long long int dp[1 << 16][20]…
状态压缩一下,然后DP还是很容易想到,dp[i][j]表示状态为i时,模 k 为 j 的排列数的个数,然后每次对一个状态扩展,添加新的数字: 然而那个取膜没懂.....…