zoukankan      html  css  js  c++  java
  • [SPOJ BALNUM] Balanced Numbers

    dp[dep][ex][sta]表示长度为dep的,前面出现过的数的集合为ex,不满足要求的数字的集合为sta的满足要求的数的个数

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 ll dp[20][1024][1024];
     5 int dig[20],tmp;
     6 ll dfs(int dep,int ex,int sta,int zero,int flag){
     7     if(!dep)return (ex&sta)==0;
     8     if(!flag&&dp[dep][ex][sta]!=-1)return dp[dep][ex][sta];
     9     int lim=flag?dig[dep]:9;
    10     ll ans=0;
    11     for(int i=0;i<=lim;i++){
    12         if(zero&&i==0)ans+=dfs(dep-1,0,tmp,1,flag&(i==lim));
    13         else ans+=dfs(dep-1,ex|(1<<i),sta^(1<<i),0,flag&(i==lim));
    14     }
    15     if(!flag)dp[dep][ex][sta]=ans;
    16     return ans;
    17 }
    18 ll solve(ll x){
    19     int dd=0;
    20     while(x)dig[++dd]=x%10,x/=10;
    21     return dfs(dd,0,tmp,1,1);
    22 }
    23 int main(){
    24     memset(dp,-1,sizeof(dp));
    25     for(int i=0;i<10;i+=2)tmp|=(1<<i);
    26     int T;
    27     scanf("%d",&T);
    28     while(T--){
    29         ll A,B;
    30         scanf("%lld%lld",&A,&B);
    31         printf("%lld
    ",solve(B)-solve(A-1));
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    构建之法阅读笔记03
    12.16第三周总结
    构建之法阅读笔记02
    12.9第二周周总结
    四则运算2
    构建之法阅读笔记01
    12.2第一周总结
    课堂练习-增加信息
    软件工程00
    web自动化测试---web页面元素的定位
  • 原文地址:https://www.cnblogs.com/Ngshily/p/5485661.html
Copyright © 2011-2022 走看看