51nod 1043 数位dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1043
输入N(1<= N <= 1000)
输出幸运号码的数量 Mod 10^9 + 7
1
9
dp[i][j]表示位数为j各位数字和为i的方案个数,一开始我去除了前导零的影响,统计时的复杂度就会高,导致一直有几个点过不去。
后来发现其实可以算上有前导零的最后能在O(1)内减去他,降低了复杂度而且空间也能降维了,因为只需要最后两组数据,皆大欢喜。
dp[i][j]=SUM{ dp[i-x][j-1] | i>=x }
ans=SUM{ dp[i][n]*(dp[i][n]-dp[i][n-1]) | 0<=i<=9*n }
前i位数字和为j里面具有前导零的方案<==>前i-1位数字和为j的方案 很巧妙
#include<iostream>
#include<cstring>
#include<cstdio>
#include<stdio.h>
using namespace std;
#define LL long long
const LL mod = 1e9 + ;
LL dp[][];
int main()
{
register int i, j, k ;
int len, m, cur = ;
for (i = ;i <= ;++i) dp[i][cur] = ;
scanf("%d", &len);
m = * len;
for (j = ;j <=len;++j)
{
cur ^= ;
for (i = ;i <= m;++i)
{
LL sum = ;
for (int x = ;x <= ;++x) {
if (i >=x) {
sum =( sum + dp[i-x][cur^]) ;
if (sum > mod) sum %= mod;
}
else break;
}
dp[i][cur] = sum;
}
}
if (len == ) { puts("");return ; }
LL ans = ;
for (i = ;i <= m;++i)
ans = (ans + dp[i][cur] * (dp[i][cur] - dp[i][cur^])) % mod;
printf("%lld\n", ans);
//system("pause");
return ;
}
51nod 1043 数位dp的更多相关文章
- 51nod 1042 数位dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1042 1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131 ...
- 51nod 1009 数位dp入门
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009 1009 数字1的数量 基准时间限制:1 秒 空间限制:13107 ...
- 51nod 1043 幸运号码(数位dp)
题目链接:51nod 1043 幸运号码 题解:dp[i][j]表示 i 个数和为 j 的总数(包含0开头情况) dp[i][j] = dp[i-1][j-k] i & 1 :这里用滚动数组节 ...
- 1043 幸运号码 数位DP
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1043 设dp[i][j]表示前i位数中,i位数的和为j时的所有情况. 转 ...
- 51nod 1009 - 数字1的数量 - [数位DP][模板的应用以及解释]
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009 基准时间限制:1 秒 空间限制:131072 KB 给 ...
- 51NOD 1623 完美消除 数位DP
题目描述: 定义数的消除操作为选定[L,R,x],如果数的第L到第R位上的数字都大于等于x,并且这些数都相等,那么该操作是合法的(从低位到高位编号,个位是第一位,百位是第二位……),然后将这些位数上的 ...
- 51nod 1009 数字1的数量(数位dp模板)
给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. 数位dp的模板题 ...
- 51Nod 1009 数字1的个数 | 数位DP
题意: 小于等于n的所有数中1的出现次数 分析: 数位DP 预处理dp[i][j]存 从1~以j开头的i位数中有几个1,那么转移方程为: if(j == 1) dp[i][j] = dp[i-1][9 ...
- 51nod1043(数位dp)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1043 题意:中文题诶- 思路:数位dp 我们用dp[i][j ...
随机推荐
- OpenStack Network --- introduction部分 阅读笔记
Basic Networking 1.混杂模式(promiscuous mode):当网卡被配置为混杂模式时,它们会将所有的frame传递给操作系统,即使MAC地址不匹配. 2.交换机(switch) ...
- python列表套字典数据类型转换
1.题目 list3 = [ {'name':'Alex','hobby':'抽烟'}, {'name':'Alex', 'hobby':'喝酒'}, {'name':'Alex', 'hobby': ...
- 搜狐云景client工具评測之WordPress的搭建
搜狐云景是搜狐推出的一款PaaS产品,眼下还处在公測阶段,拿到邀请码后试用了一下,感觉还不错. 搜狐云景提供了四种方式部署应用,感觉应该能够满足各种口味的码农:1. zip包的形式在网页上传并部署 ...
- 基于JSP的学术交流论坛系统的设计与实现
版权声明:本文为[博主](https://zhangkn.github.io)原创文章.未经博主同意不得转载. https://creativecommons.org/licenses/by-nc-s ...
- 超过两行显示省略号 -webkit-line-clamp、-webkit-box-orient vue打包后不起作用
为了实现两行显示缩略显示,但是本地是可以显示,打包后不起作用 word-break: break-all; text-overflow: ellipsis; display: -webkit-box; ...
- python16_day10【SelectWeb、SelectWget、paramiko、pymysql】
一.select实现Web框架(自定义WEB框架) 浏览器输入:http://127.0.0.1:8888/index.html import select import socket class F ...
- smarty内置函数
1.{append} 追加 2.{assign} 赋值 3.{block} 块 4.{call} 调用 5.{capture}捕获 6.{config_load}用来从配置文件中加载config变 ...
- Android 属性自定义及使用获取浅析
一.概述 相信你已经知道,Android 可使用 XML 标签语言进行界面的定义.每个标签中有一个一个的属性,这些属性有相应的属性值.例如: <cn.neillee.composedmenu.R ...
- SqlHelper简单实现(通过Expression和反射)1.引言
之前老大说要改变代码中充斥着各种Select的Sql语句字符串的情况,让我尝试着做一个简单的SqlHelper,要具有以下功能: 1.不要在业务代码中暴露DataTable或者DataSet类型: 2 ...
- var和let/const的区别
let和const是 ES6 新增的命令,用于声明变量,这两个命令跟 ES5 的var有许多不同,并且let和const也有一些细微的不同,再认真阅读了阮一峰老师的文档后,发现还是有一些不知道的细节. ...