poj 3252 组合数】的更多相关文章

    主要考察组合数知识,初始化的时候参考公式 首先先推个公式,就是长度为len的Round Numbers的个数.      长度为len,第一位肯定是1了.      那么后面剩下 len-1位.      如果len-1是偶数.      那么  C(len-1,(len-1)/2+1)+C(len-1,(len-1)/2+2)+````C(len-1,len-1) =   ( 2^(len-1)-C(len-1,(len-1)/2) )/2;     如果len是奇数    那么就是 …
###POJ 3252 题目链接 ### 题目大意:给你一段区间 [Start,Finish] ,在这段区间中有多少个数的二进制表示下,0 的个数 大于等于 1 的个数. 分析: 1.很显然是数位DP,枚举这区间中所有数的二进制位数.由于与 0 的个数有关,故需要用 lead 标记前导零情况. 2.然后就是要处理 1 的个数与 0 的个数,故 dp 的第二维状态即要表示出枚举到当前位 pos 时所拥有的 0 的个数 (或 1). 但是你会发现,如果当前知道的是 前面几位中 0 的个数,为了满足题…
POJ 3252:Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10099 Accepted: 3669 Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Sciss…
http://poj.org/problem?id=3252//自己搞了很长时间...现在刚刚有点明白.. 1 #include <iostream> using namespace std; ][]; void init(){ ;i<;i++){//初始化组合数利用的是公式 c[i][] = c[i][i] = ; ;j<i;j++) c[i][j] = c[i-][j]+c[i-][j-];//公式 } } int mx(int a,int b){ if(a>b) ret…
题目链接:http://poj.org/problem?id=3252 题意: 一个数的二进制表示中0的个数大于等于1的个数则称作Round Numbers.求区间[L,R]内的 Round Numbers的个数. 思路: int c[N][N]; void init(){    int i,j;    FOR0(i,N)     {        c[i][0]=c[i][i]=1;        for(j=1;j<i;j++) c[i][j]=c[i-1][j-1]+c[i-1][j]; …
以sample为例子 [2,12]区间的RoundNumbers(简称RN)个数:Rn[2,12]=Rn[0,12]-Rn[0,1] 即:Rn[start,finish]=Rn[0,finish]-Rn[0,start-1] 所以关键是给定一个X,求出Rn[0,X] 现在假设X=10100100  这个X的二进制总共是8位,任何一个小于8位的二进制都小于X 第一部分,求出长度为[0,7]区间内的二进制是RoundNumber的个数  对于一个长度为Len的二进制(最高位为1),如何求出他的Rou…
通过这个题对于数位dp中前导0的处理有了新的认识. 题目链接:http://poj.org/problem?id=3252 //http://poj.org/problem?id=3252 #include<cstdio> #include<cstring> using namespace std; ]; ][][]; int dfs(int pos,int preok,int more,int pre0) { ) ?:; ][pre0]!=-) ][pre0]; :b[pos];…
Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8590   Accepted: 3003 Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Scissors',…
题意:算出区间内二进制中0的个数大于等于1的个数的数字有多少个 /* 本来以为用数位DP搞,但是组合数更简单. 我们设n的二进制长度为len. ①:先考虑长度小于len的数字. 这里以数字22为例,二进制拆成10110,len=5. len=1时,只能是1(题目要求是正数): len=2时,第一位是1,剩下的1位,至少有1个0,ans+=C(1,1); -- len=k时,第一位是1,剩下的len-k位,如果至少要有p个0,那么ans+=C(len-k,p)+...+C(len-k,len-k)…
The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Scissors', 'Ro, Sham, Bo', and a host of other names) in order to make arbitrary decisions such as who gets to be milked…