数位dp解水题

luogu1179

dp[i][j]表示 有i位,且首位是j(包括0) 的 ‘2’的个数 
dp[i][j]={
        Σ(dp[i-1][k]),j!=2;
        Σ(dp[i-1][k])+val[i],j!=2;
      }
其中val[i]为,十进制下,第i位的权值,
在这里可以当作 如果 j是2 那会多计数几次来使用 令 work(x) 表示 0~x-1 中 '2' 的个数
目标 work(r+1)-work(l);
work()注意
在累加dp[i][j]的同时,统计之前出现了几次‘2’,记为t;
每次再加上t*val[i];
 #include<bits/stdc++.h>
using namespace std;
int len,dp[][],digit[],l,r;
int val[]={,,,,,,,};
//dp[i][j]表示 有i位,且首位是j 的 ‘2’的个数
void init(){
dp[][]=;
for(int i=;val[i]<=r;i++)
for(int j=;j<=;j++){
for(int k=;k<=;k++)
dp[i][j]+=dp[i-][k];
if(j==)dp[i][j]+=val[i];
}
}
int work(int x){
len=;
for(;x;x/=)digit[++len]=x%;
digit[len+]=;
int ret=,t=;
for(int i=len;i;i--){
if(digit[i+]==)t++;
for(int j=;j<digit[i];j++)
ret+=dp[i][j]+t*val[i];
}
return ret;
}
int main(){
cin>>l>>r;
init();
cout<<work(r+)-work(l);
return ;
}

最新文章

  1. OC中协议, 类目, 时间, 延展, 属性
  2. 基于“事件”驱动的领域驱动设计(DDD)框架分析
  3. Retention、Documented、Inherited三种注解
  4. linux编译安装MySQL
  5. Frenetic Python实验(二)
  6. csdn第三名
  7. Mac上因磁盘格式导致gulp无限刷新问题
  8. &lt;button&gt;会自动提交表单吗?
  9. Java中的匿名类
  10. Linux下编译安装redis,详细教程
  11. HW--漂亮度2(测试通过)
  12. C#多线程解决界面卡死问题
  13. Hive 的简单使用及调优参考文档
  14. 转:Maven项目编译后classes文件中没有dao的xml文件以及没有resources中的配置文件的问题解决
  15. 分布式版本控制系统 Git 教程
  16. 解决php的sha1和java的sha1(DigestUtils.sha1Hex)产生的字符串不相等的问题
  17. IDEA jsp模板
  18. MinerQueue.java 访问队列
  19. C# 定时任务
  20. SVM:根据大量图片来精确实现人脸识别—Jason niu

热门文章

  1. 远程访问rhel7的oracle中的问题
  2. AJPFX的内存管理小结
  3. 解决IDEA Tomcat控制台乱码问题
  4. 《Python基础教程》 读书笔记 第六章 抽象 函数 参数
  5. 关于 propertychange 兼容性问题
  6. ubuntu破解密码方法
  7. 【Win32汇编】编译环境配置
  8. os x 中出现message sent to deallocated instance 的错误总结
  9. CSS 循环动画效果。
  10. git 本地与远程仓库出现代码冲突解决方法