zoukankan      html  css  js  c++  java
  • hdu 6156 回文数 数位dp

    题意:k进制下的回文个数。。其实就是普通的。。稍加修改

    思路:老题,直接枚举L进制--R进制

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define MEM(a,b) memset(a,b,sizeof(a))
    #define bug puts("bug");
    #define PB push_back
    #define MP make_pair
    #define X first
    #define Y second
    typedef long long ll;
    typedef pair<int,int> pii;
    const int maxn=2e6+10;
    const int mod=1e9+7;
    using namespace std;
    int n;
    int dight[100],tmp[100];
    long long dp[50][50][50][40];
    long long dfs(int start,int pos,int s,bool limit,ll k){
        if(pos<0)
            return s;
        if(!limit&&dp[pos][s][start][k]!=-1)
            return dp[pos][s][start][k];
        ll ret=0;
        int up=limit?dight[pos]:k-1;
        for(int d=0; d<=up; ++d){
            tmp[pos]=d;
            if(start==pos&&d==0)
                ret+=dfs(start-1,pos-1,s,limit&&d==up,k);
            else if(s&&pos<(start+1)/2)
                ret+=dfs(start,pos-1,tmp[start-pos]==d,limit&&d==up,k);
            else
                ret+=dfs(start,pos-1,s,limit&&d==up,k);
        }
        if(!limit)dp[pos][s][start][k]=ret;
        return ret;
    }
    ll solve(ll a,ll k){
        memset(dight,0,sizeof(dight));
        int cnt=0;
        while(a!=0){
            dight[cnt++]=a%k;
            a/=k;
        }
        return dfs(cnt-1,cnt-1,1,1,k);
    }
    int main(){
        memset(dp,-1,sizeof(dp));
        int t,cnt=1;
        scanf("%d",&t);
        while(t--){
            long long x,y,l,r;
            scanf("%lld%lld%lld%lld",&x,&y,&l,&r);
            if(x>y)swap(x,y);
            ll ans=0;
            for(ll i=l;i<=r;i++){
                ans+=(y-x+1);
                ans+=(i-1)*(solve(y,i)-solve(x-1,i));
            }
            printf("Case #%d: %lld
    ",cnt++,ans);
        }
        return 0;
    }



  • 相关阅读:
    adb shell am force-stop <package>
    推荐一个代码生成工具:freemarker
    子控件跟着父控件变色
    sqlite支持的数据库类型
    android 资源文件
    一个手机基础信息的获取代码
    二维码的开源项目
    在点击HOME键时, 在点击icon回到原来的应用。
    Wireshark "The NPF driver isn’t running…"
    .atomic vs volatile
  • 原文地址:https://www.cnblogs.com/zhangxianlong/p/10672488.html
Copyright © 2011-2022 走看看