CF908G New Year and Original Order(DP,数位 DP)
又一次降智……
(数位 DP 原来可以写这么短,学到了)
问题可以转化为求数位中 $\ge k$ 的有恰好 $j$ 位的数的个数。设为 $c_{j,k}$。
那么答案就是:(考虑把 $k$ 的贡献拆开,比如 $9$ 的贡献拆成 $1$ 的贡献的 $9$ 倍,然后分配到 $1$ 到 $9$)
$$\sum_{1\le j\le n,1\le k\le 9}c_{j,k}\underbrace{111\dots111}_{j}$$
求 $c_{j,k}$ 可以数位 DP。(此处不是记忆化搜索的形式,所以方程会有点不同)
$f[i][j][k][l]$ 表示前 $i$ 位,$\ge k$ 的有恰好 $j$ 位,$l$ 是有没有顶到上界(就是后面要不要顶着 $n$ 枚举,类似记忆化搜索中的 $limit$)。
转移较为显然,不再赘述。
时间复杂度 $O(len^2)$。(有一个 $100$ 的常数)
#include<bits/stdc++.h>
using namespace std;
const int maxn=,mod=1e9+;
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return f?-x:x;
}
int n,f[maxn][maxn][][],ans;
char s[maxn];
int calc(int x){
int pro=,s=;
FOR(i,,x){
s=(s+pro)%mod;
pro=10ll*pro%mod;
}
return s;
}
int main(){
scanf("%s",s+);
n=strlen(s+);
FOR(i,,) f[][][i][]=;
FOR(i,,n) FOR(j,,i) FOR(k,,) FOR(l,,) if(l<k || j){
if(l==s[i]-'') f[i][j][k][]=(f[i][j][k][]+f[i-][j-(l>=k)][k][])%mod;
f[i][j][k][]=(f[i][j][k][]+f[i-][j-(l>=k)][k][])%mod;
if(l<s[i]-'') f[i][j][k][]=(f[i][j][k][]+f[i-][j-(l>=k)][k][])%mod;
}
FOR(j,,n) FOR(k,,) ans=(ans+1ll*calc(j)*(f[n][j][k][]+f[n][j][k][])%mod)%mod;
printf("%d\n",ans);
}
CF908G New Year and Original Order(DP,数位 DP)的更多相关文章
- CF908G New Year and Original Order 数位DP
传送门 看到数据范围到\(10^{700}\)毫无疑问数位DP.那么我们最重要的问题是如何有效地维护所有数位排序之后的数的值. 对于某一个数\(x\),设\(f_{x,i} (i \in [1,9]) ...
- hdu 5642 King's Order(数位dp)
Problem Description After the king's speech , everyone is encouraged. But the war is not over. The k ...
- HDU 5642 King's Order【数位dp】
题目链接: http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=677&pid=1003 题意: 求长度为n的序列 ...
- [DP]数位DP总结
数位DP总结 By Wine93 2013.7 1.学习链接 [数位DP] Step by Step http://blog.csdn.net/dslovemz/article/details/ ...
- 数位dp模板 [dp][数位dp]
现在才想到要学数位dp,我是不是很弱 答案是肯定的 以一道自己瞎掰的题为模板 //题: //输入数字n //从0枚举到n,计算这n+1个数中含有两位数a的数的个数 //如12930含有两位数93 #i ...
- 【xsy1611】 数位dp 数位dp
这题是显然的数位$dp$,然而我居然写了一个下午!!! 我们不难想到差分,令$solve(x,y)$表示从第一个数字在区间$[0,x]$,第二个数字在区间$[0,y]$的答案. 不难发现题目中给了你一 ...
- Codeforces Round #235 (Div. 2) D. Roman and Numbers 状压dp+数位dp
题目链接: http://codeforces.com/problemset/problem/401/D D. Roman and Numbers time limit per test4 secon ...
- hdu4352-XHXJ's LIS状压DP+数位DP
(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:传送门 原题目描述在最下面. 在区间内把整数看成一个阿拉伯数字的集合,此集合中最长严格上升子序列的长度为k的个数. 思路: ...
- luogu P4798 [CEOI2015 Day1]卡尔文球锦标赛 dp 数位dp
LINK:卡尔文球锦标赛 可以先思考一下合法的序列长什么样子. 可以发现后面的选手可以使用前面出现的编号也可以直接自己新建一个队. 其实有在任意时刻i 序列的mex>max.即要其前缀子序列中1 ...
随机推荐
- 大话设计模式Python实现-状态模式
状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 下面是一个状态模式的demo: #!/usr/bin/env python # -*- ...
- JavaScript DOM 常用操作
1.理解DOM: DOM(Document Object Model ,文档对象模型)一种独立于语言,用于操作xml,html文档的应用编程接口. 怎么说,我从两个角度理解: 对于JavaScript ...
- jenkins环境自动部署
https://my.oschina.net/tonystark/blog/1920889 示例脚本: #!/bin/bash #export BUILD_ID=dontKillMe这一句很重要,这样 ...
- 超详细国外VPS搭建教程
vps文章请访问我的github:https://github.com/pig6/vps
- Nginx自建SSL证书部署HTTPS网站
一.创建SSL相关证书 1.安装Nginx(这里为了测试使用yum安装,实际看具体情况) [root@localhost ~]# yum install nginx -y #默认yum安装已经支持SS ...
- JVM的监控工具之jhat
在上一篇文件文章中讲到了jhap的用法:https://www.cnblogs.com/cheng21553516/p/11223615.html,既然jhap可以转储堆的快照文件, 那么用什么来分析 ...
- java servlet 初学笔记
1. 页面HTML标签中的中文乱码 在 doGet 或者 doPost 等方法内的第一行添加: response.setCharacterEncoding("gbk"); 2. 避 ...
- Java面试复习(纯手打)
1.面向对象和面向过程的区别: 面向过程比面向对象高.因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素得时候,比如单片机.嵌入式开发.Linux/Unix等一般采用面向过 ...
- Java11新特性解读
在去年的9月26日,Oracle官方宣布Java11正式发布,这是Java大版本周期变化后的第一个长期支持版本,非常值得关注.Java9和Java10都在很短的时间内就过渡了,所以,Java11将是一 ...
- [b0017] python 归纳 (三)_类名当参数传入
# -*- coding: UTF-8 -*- """ 测试传入类名 总结: 似乎python里面的一切东西都可以当参数传入 函数或者方法 ""&qu ...