http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1043

设dp[i][j]表示前i位数中,i位数的和为j时的所有情况。

转移的时候和普通的数位dp是一样转移的,但是如果你压缩了空间的话,就是用滚动数组的话,记录情况数就要多开一个变量来保存,

然后看看怎么排除前导0的情况。

如果产生的和值是j,然后前i - 1位产生的和值也是j,那么第i为就是前导0了。需要排除。

然后前n部分的和值的所有情况(需要排除前导0) * 后n部分的和值情况。就是答案。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <bitset>
const int MOD = 1e9 + 7;
LL dp[2][9 * 1000 + 20];
void work() {int n;cin >> n;dp[0][0] = 1;int now = 0;for (int i = 1; i <= n; ++i) {now = !now;for (int k = 0; k <= 9 * i; ++k) {LL sum = 0;for (int j = 0; j <= 9; ++j) {if (k >= j) {sum += dp[!now][k - j];if (sum >= MOD) sum %= MOD;}}dp[now][k] = sum;}}LL ans = 0;for (int i = 1; i <= 9 * n; ++i) {
//        assert(dp[now][i] - dp[!now][i] >= 0);ans += ((dp[now][i] - dp[!now][i] + MOD) % MOD * dp[now][i]) % MOD;if (ans >= MOD) ans %= MOD;}cout << ans << endl;
}int main() {
#ifdef localfreopen("data.txt", "r", stdin);
//    freopen("data.txt", "w", stdout);
#endifwork();return 0;
}

View Code

转载于:https://www.cnblogs.com/liuweimingcprogram/p/6323673.html

1043 幸运号码 数位DP相关推荐

  1. 1043 幸运号码 数位dp

    1043 幸运号码 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 1个长度为2N的数,如果左边N个数的和 = 右边N个数的和,那么就是一个幸运号码 ...

  2. 51Nod 1043 幸运号码

    1 #include <stdio.h> 2 #include <algorithm> 3 using namespace std; 4 5 typedef long long ...

  3. 数位dp 的简单入门

    时间紧张,就不讲那么详细了. 之前一直被深搜代码误解,以为数位dp 其实就是记忆化深搜...(虽说爆搜确实很舒服而且还好想) 但是后来发现数位dp 的标准格式其实是 预处理 + dp ...... 数 ...

  4. hdu2089 不要62 数位dp

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  5. Hdu 2089-不要62 数位dp

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  6. 数位 DP 入门 (不要 62+windy 数)

    \[I\] 平常的做法是设 \(f_{i,j}\) 为 \(0\)~\(j \times 10^{i-1}\) 的合法个数,这里用某种神奇而快速的做法. 简化题意: 不要 \(6\ 2\) 连在一起的 ...

  7. [SOCI2005]最大子矩阵(DP) + [JXOI2018]守卫(DP) + [CQOI2016]手机号码(数位DP)[各种DP专练]

    DP专练博客 DP专练 T1:最大子矩阵 题目 题解 代码实现 T2:守卫 题目 题解 代码实现 T3:手机号码 题目 题解 代码实现 T1:最大子矩阵 题目 这里有一个n*m的矩阵,请你选出其中k个 ...

  8. 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 682  Solved: 364 Description 我们称 ...

  9. 【bzoj3530】[Sdoi2014]数数 AC自动机+数位dp

    题目描述 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3223不是幸运 ...

最新文章

  1. 最短路专题(不完整)
  2. Spring AOP通知实例 – Advice
  3. 【推导】【数学期望】Gym - 101237D - Short Enough Task
  4. sort and uniq
  5. vba cad 获取宏的路径_VBA批量创建文件目录及链接,建议收藏备用
  6. 树莓派第一次开机自动连接WIFI(不用显示屏方法)
  7. 给VS2008中c#代码自动添加版权信息
  8. 3.性能之巅 洞悉系统、企业与云计算 --- 操作系统
  9. linux分布式文件部署,Linux的企业-分布式文件系统mfs(moosefs)搭建与配置
  10. jsPDF介绍与兼容IE的补丁
  11. 领英开源企业级数据挖掘软件:WhereHows
  12. ubuntu开机后nvidia驱动突然消失,nvidia显卡驱动卸载与安装
  13. 003java面试笔记——【java基础篇】从团八百失败面试总结的java面试题(未完待续)
  14. Tik Tok跨境电商与传统跨境电商有什么区别?
  15. java爬移动端搜索引擎_尝试java开发搜索引擎爬虫
  16. 一.二.管理和信息化软件的关系
  17. 联想计算机电源风扇怎样清理,电脑风扇怎么拆开清洗_电脑风扇的三根线的作用...
  18. textblob 情感分析_使用TextBlob进行远程学习的推文中的情感分析
  19. 高分二号多光谱GEOTIFF影像批量转换为JPG图片
  20. php神策数据统计,神策数据上报操作(示例代码)

热门文章

  1. 利用for循环打印出不同的三角形
  2. Command line is too long. Shorten command line for Doc.generateAsciiDocs or
  3. iPhone黑屏幕转圈圈(解决办法)
  4. 已知一个点的经纬度、方位角、距离,求另一点经纬度
  5. SpringBoot集成WebSocket案例:服务端与客户端消息互通
  6. Android开发笔记(一百二十五)自定义视频播放器
  7. mysql linux root密码忘记了怎么办,linux下忘记mysql的root密码解决办法 | 严佳冬
  8. 综合网上解决mysql 5.7保存emoji 失败问题
  9. c统计查找的字符串个数
  10. 一次mongoengine查询速度慢的优化