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 ...
随机推荐
- Beyond Compare的自定义破解方法
因本人是程序员的缘故,经常时不时就是几千几万行代码找不同,也就时常要用到一个超级无敌好用的文本对比软件:Beyond Compare. 然而破解成了一大问题,网上有很多注册码都已经被封了或者是注销掉了 ...
- redis之线程IO模型
非阻塞 IO 当我们调用套接字的读写方法,默认它们是阻塞的,比如 read 方法要传递进去一个参数n,表示读取这么多字节后再返回,如果没有读够线程就会卡在那里,直到新的数据到来或者连接关闭了,read ...
- LibLog 类库 分析
前期思考: Microsoft.Logging 是否可用? 是否需要提供默认的 Logger 实现? 不需要.1,用户自己开启日志功能,设置开启属性,即可打印出相应的日志. LibLog 类库分析: ...
- dedecms5.7文章页替换掉特定标志的图片链接
dedecms5.7文章页的替换掉特定标志的图片链接 解决思路 1个是在数据库里面执行替换操作 我自己查看 织梦后台也有这个功能 但是执行了一次 效果不是很好 那么就用下面的 在模板中进行内容替 ...
- 面试前必须要知道的21道Redis面试题
1.使用redis有哪些好处? 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) 支持丰富数据类型,支持string,list,set,so ...
- 回忆C++
内联函数 内联函数适用于函数较为短小的情况. 内联函数存在的意义是:提高程序运行效率. 内联函数的缺点:如果一个内联函数太长且频繁调用,会导致生成的可执行程序较大. 静态链接库会被嵌入到生成的可执行程 ...
- jQuery 遍历方法大全
下表列出了用于jQuery 遍历所有方法. 方法 描述 add() 将元素添加到匹配的元素集中 addBack() 将上一组元素添加到当前组中 andSelf() 在版本1.8中已弃用. addBac ...
- PHP 数组函数大全
PHP数组函数是核心的一部分.无需安装即可使用这些函数 函数名称 描述 array_change_key_case 将数组中的所有键名修改为全大写或小写 array_chunk 将一个数组分割成多个 ...
- 对cell每一行做标记
通过数组进行标记 初始化列表的时候给一个值如 for (int i = 0; i < [self.tableData count]; i++) { [_allOrderBoo ...
- Asp.net管道模型之(HttpModules 和 HttpHandler)
上一节我们从大概范围介绍了管道模型的整体流程,我们从其中知道管道最重要的两大组件为:HttpModules 跟 HttpHandler.今天我们着重来介绍一下这两大组件 一:asp.net处理管道 从 ...