题目描述:

  定义数的消除操作为选定[L,R,x],如果数的第L到第R位上的数字都大于等于x,并且这些数都相等,那么该操作是合法的(从低位到高位编号,个位是第一位,百位是第二位……),然后将这些位数上的数减x;否则就是不合法的,不能进行操作。对一个数操作最少的次数使得这个数变成0,这个操作次数称为该数的最小操作数。如:1232的最小操作数为3,一个合法解是[2,2,1],[1,3,2],[4,4,1]。

求L~R中最小操作数为k的数的个数。

例如:132,需要操作3次才能变为0。而131131 => 111131 => 111111 =>0

输入:

  单组测试数据。三个整数L、R和k(1<=L<=R<=10^18,1<=k<=18)

题解:

  典型数位DP

  设定dp[i][j][k] 前i位下所用数字状态j花费次数时k的个数

  注意这里的状态j是指 后面的放入数字能有重复效应的 状态

  例如 313 花费的次数是3 但131花费次数2    两者在第二位的状态 是(3)和(1)

  最后还要注意0不花费

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N = , M = 2e6+, inf = 2e9, mod = 1e9+;
int d[N];
long long L,R,k,dp[][<<][],vis[][<<][];
int cal(int p,int i) {
for(int k=i+;k<=;k++) if(p&(<<k)) p^=(<<k);
return p;
}
long long dfs(int dep,int f,int p,int K)
{
if(dep<) return K==k;
if(f&&vis[dep][p][K]) return dp[dep][p][K];
if(f){
long long& ret = dp[dep][p][K];
vis[dep][p][K]=;
for(int i=;i<=;i++)
{
if(p&(<<i)||i==) {
ret+=dfs(dep-,f,cal(p,i),K);
}
else ret+=dfs(dep-,f,cal(p|(<<i),i),K+);
}
return ret;
}
else {
long long ret = ;
for(int i=;i<=d[dep];i++)
{
if(p&(<<i)||i==)
ret+=dfs(dep-,i<d[dep],cal(p,i),K);
else ret+=dfs(dep-,i<d[dep],cal(p|(<<i),i),K+);
}
return ret;
}
}
long long solve(long long x)
{
memset(dp,,sizeof(dp));
memset(vis,,sizeof(vis));
int len = ;
while(x){
d[len++] = x%;
x/=;
}
dfs(len-,,,);
}
int main(){
while(scanf("%lld%lld%lld",&L,&R,&k)!=EOF)
{
printf("%lld\n",solve(R)-solve(L-));
}
return ;
}

51NOD 1623 完美消除 数位DP的更多相关文章

  1. 51nod 1623 完美消除(数位DP)

    首先考虑一下给一个数如何求它需要多少次操作. 显然用一个单调栈就可以完成:塞入栈中,将比它大的所有数都弹出,如果栈中没有当前数,答案+1. 因为数的范围只有0~9,所以我们可以用一个二进制数来模拟这个 ...

  2. 51nod 1232 完美数 数位dp

    1232 完美数 题目来源: 胡仁东 基准时间限制:2 秒 空间限制:131072 KB  如果一个数能够被组成它的各个非0数字整除,则称它是完美数.例如:1-9都是完美数,10,11,12,101都 ...

  3. 51nod 1043 幸运号码(数位dp)

    题目链接:51nod 1043 幸运号码 题解:dp[i][j]表示 i 个数和为 j 的总数(包含0开头情况) dp[i][j] = dp[i-1][j-k] i & 1 :这里用滚动数组节 ...

  4. 51nod 1009 - 数字1的数量 - [数位DP][模板的应用以及解释]

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009 基准时间限制:1 秒 空间限制:131072 KB 给 ...

  5. 51nod 1042 数位dp

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1042 1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131 ...

  6. 51nod 1009 数位dp入门

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009 1009 数字1的数量 基准时间限制:1 秒 空间限制:13107 ...

  7. [51nod Round 15 B ] 完美消除

    数位DP. 比较蛋疼的是,设a[i]表示第i位上数字,比方说a[1]<a[2]>a[3],且a[1]==a[3]时,这两位上的数可以放在一起搞掉. 所以就在正常的f数组里多开一维,表示后面 ...

  8. 51nod 1009 数字1的数量(数位dp模板)

    给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1.   数位dp的模板题   ...

  9. 51Nod 1009 数字1的个数 | 数位DP

    题意: 小于等于n的所有数中1的出现次数 分析: 数位DP 预处理dp[i][j]存 从1~以j开头的i位数中有几个1,那么转移方程为: if(j == 1) dp[i][j] = dp[i-1][9 ...

随机推荐

  1. 在.NET 环境中实现每日构建(Daily Build)--ccnet,MSBuild篇(转载)

    每日构建,对我们团队来说一个全新的概念.随着项目开发的进展,在开发过 程需要及时反馈一些BUG和功能要求的处理情况.而在这种情况下每天或隔一段时间Build一个版本,工作量还是比较大的,所以就特别有必 ...

  2. Redis介绍以及安装(Linux与windows)

    1.liunux系统 redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了memcached的 不足,它支持存储的value类型 ...

  3. VS的工程链接优化的问题

    打算在项目中试试 CATCH 这个测试框架.请同事在工程中进行了试验,结果却出现了一点问题. CATCH 和 GTest 之类的框架一样,可以直接在 C++ 文件中定义测试函数,就能自动地注册到测试列 ...

  4. C#表达式树的初步了解

    在很早以前就听说过表达式树了,但并没有去了解它.虽然自己用过linq to sql和linq to entity,但也就用着就用着,并没有去深究c#代码怎么会生成sql代码而不是IL.废话不多说了,开 ...

  5. 关于 jsonp 跨域

    jquery的jsonp真是一个很深沉的东西.....我一直以为,jsonp就是和json一样,然而并不是,jsonp的返回格式必须包在定义的回调里面...就是这样,默认是cb.要不然就报错,就是这样 ...

  6. 第20章 使用LNMP架构部署动态网站环境

    章节概述: 本章节将从Linux系统的软件安装方式讲起,带领读者分辨RPM软件包与源码安装的区别.并能够理解它们的优缺点. Nginx是一款相当优秀的用于部署动态网站的服务程序,Nginx具有不错的稳 ...

  7. Instance Variables in ruby

    Dogs have many shared characteristics, like the abilities to wag their tails and drink water from a ...

  8. mysql in 子查询 效率慢 优化(转)

    mysql in 子查询 效率慢 优化(转) 现在的CMS系统.博客系统.BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下.但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久! ...

  9. 使用XmlWriter写Xml

    假定创建了XmlWriter的实例变量xmlWriter,下文中将使用此实例变量写Xml 1.如何使用XmlWriter写Xml文档声明 ? // WriteStartDocument方法可以接受一个 ...

  10. 8个开发必备的PHP功能

    做过PHP开发的程序员应该清楚,PHP中有很多内置的功能,掌握了它们,可以帮助你在做PHP开发时更加得心应手,本文将分享8个开发必备的PHP功能,个个都非常实用,希望各位PHP开发者能够掌握. 1.传 ...