poj3252Round Numbers

链接

也算是组合 以前按组合做过一次 忘记怎么做的了 

这次按dp写的 dp[i][j][g][k] 表示第i位为k(0|1)而且有j个1,g个0的情况数

貌似写的麻烦了。。。这一类的题,进行逐位计算就可以 不过要很细心,边界处理 特殊情况处理什么的 。

 

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 #include<cmath>
 8 #include<queue>
 9 #include<set>
10 using namespace std;
11 #define N 100000
12 #define LL long long
13 #define INF 0xfffffff
14 const double eps = 1e-8;
15 const double pi = acos(-1.0);
16 const double inf = ~0u>>2;
17 LL dp[35][35][35][2];
18 int d[35];
19 void init()
20 {
21     int i,j;
22     dp[1][0][1][0] = 1;
23     dp[1][1][0][1] = 1;
24     for(i = 2 ; i <= 32 ; i++)
25         for(j = 0; j <= i ; j++)
26         {
27             int k = i-j;
28             dp[i][j][k][0] += dp[i-1][j][k-1][0]+dp[i-1][j][k-1][1];
29             dp[i][j][k][1] += dp[i-1][j-1][k][0]+dp[i-1][j-1][k][1];
30         }
31 
32 }
33 int judge(int x,int f)
34 {
35     int g=0,i,j,e;
36     while(x)
37     {
38         d[++g] = x%2;
39         x/=2;
40     }
41 
42     int ans=0;
43     for(j = 1; j < g; j++)
44     for(i = 0 ; i <= j ;i++)
45     {
46         int k = j-i;
47 
48         if(k>=i)
49         ans+=dp[j][i][k][1];
50     }
51     int o = 0;
52     for(i = g-1 ; i >= 1 ; i--)
53     {
54         if(d[i+1]) o--;
55         else o++;
56         if(!d[i]) continue;
57         if(i==1)
58         {
59             o++;
60             if(o>=0) ans++;
61             continue;
62         }
63         for(e = 0 ; e <= i ; e++)
64         {
65             int k = i-e;
66             if(k-e+o>=0)
67             ans+=dp[i][e][k][0];
68         }
69     }
70     if(f)
71     {
72         o = 0;
73         for(i = 1; i<= g ;i++)
74         if(d[i]) o--;
75         else o++;
76         if(o>=0) ans++;
77     }
78     return ans;
79 }
80 int main()
81 {
82     int a,b;
83     init();
84     while(cin>>a>>b)
85     {
86         cout<<judge(b,1)-judge(a,0)<<endl;
87     }
88     return 0;
89 }
View Code

 

posted @ 2014-04-04 21:36  _雨  阅读(226)  评论(0编辑  收藏  举报