数位DP

数位dp就是套模板 ——lwz dalao

模板

( \(\text{dfs}\) 式数位 \(\text{DP}\) ):

ll dfs(ll len,bool Limit,bool zero,ll …… ) // 其他各种条件
{
	 if(len>w) return zero^1;  // 注意!!!特判 0
	 if(!Limit && dp[len][……]!=-1) return dp[len][……];
	 ll ret=0;
	 for(ll i=0;i<=9;i++)
	 {
	 	 if(Limit && i>num[len]) break; // 只有在有 Limit 最高位限制是才需要判断是否高于最高位
	 	 if(……) // 根据题目满足各种条件
	 }
	 if(!Limit && !zero) dp[len][……]=ret; // 必须同时满足没有最高位与前导 0 限制
	 return ret;
}

ll solve(ll x)
{
	 memset(dp,-1,sizeof(dp)); // 有时要每一次都赋值!!!
	 ll w=0,tmp=x;
	 while(tmp) num[++w]=tmp%10,tmp/=10; // 统计位数
   	 // 有的情况下应在这里给 dp 数组赋值
	 return dfs(w,1,1,……);
}

memset(dp,-1,sizeof(dp)); // 有时只用赋值一次!!!

例题

P4317 花神的数论题

题意:统计 \(n\) 以内正整数的二进制中 \(1\) 的个数之积。

枚举 \(k=1\dots \log_2^n\) ,分别计算二进制中 \(1\) 的个数为 \(k\) 时的数的个数,最后相乘即可。

P2657 [SCOI2009] windy 数

P2602 [ZJOI2010]数字计数

统计 \([1,n]\)\(0\dots 9\) 每一个数位分别出现多少次。

模板吧~

P3413 SAC#1 - 萌数

P4127 [AHOI2009]同类分布

CF914C Travelling Salesman and Special Numbers

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值