• [ZJOI2010]数字计数


    [ZJOI2010]数字计数

    BZOJ
    luogu
    对每个数字k做一遍数位dp
    设f[i][j]表示满足最高位到第i+1位有j个数字k的所有数一共有多少个数字k
    复杂度:(O(10^2×13^2))

    #define ll long long
    #include<bits/stdc++.h>
    using namespace std;
    int w[13],len;
    ll a,b,ans[10],f[13][13];
    void init(ll x){
    	len=0;
    	while(x){w[++len]=x%10;x/=10;}
    }
    ll dfs(int p,int d,bool lim,bool zero,int s){
    	if(!p)return s;
    	if(!lim&&!zero&&f[p][s]!=-1)return f[p][s];
    	int up=lim?w[p]:9;ll res=0;
    	for(int i=0;i<=up;i++){
    		bool k=zero&&!i;
    		res+=dfs(p-1,d,lim&&(i==up),k,s+(!k&&i==d));
    	}
    	return (!lim&&!zero)?f[p][s]=res:res;
    }
    int main(){
    	memset(f,-1,sizeof(f));
    	cin>>a>>b;
    	init(b);
    	for(int i=0;i<=9;i++)ans[i]+=dfs(len,i,1,1,0);
    	init(a-1);
    	for(int i=0;i<=9;i++)ans[i]-=dfs(len,i,1,1,0);
    	for(int i=0;i<=9;i++)cout<<ans[i]<<' ';cout<<endl;
    	return 0;
    }
    
  • 相关阅读:
    产生半透明效果的步骤
    突发奇想
    特征提取
    matlab计算混淆矩阵
    feature selection
    PCA in OriginPro 8.6
    计算局部方差
    最下生成树原理
    点击图像获取RGB
    区域填充算法
  • 原文地址:https://www.cnblogs.com/sdzwyq/p/9871645.html
Copyright © 2020-2023  润新知