AC日记——幸运号码 51nod 1043
思路:
传说中的数位dp;
不难发现,n(n<1000) ,那么,n个数的最大和为9*1000=9000;
对于9000*1000的时间范围,我们可以用dp来解决;
dp[i][j],表示第i为数总和为j的号码的个数;
每个dp[i][j]都是dp[i-1][j-v](0<=v<=9) 的总和;
然后按照左边的n和右边的n,分为有前导0,和没有前导0进行dp;
然后输出排列的答案即可;
dp[1000][9000]*2会爆空间,所以我选择压掉i维;
来,上代码:
#include <cstdio>
#include <iostream>
#include <algorithm> using namespace std; #define ri 9005
#define mod 1000000007 long long n,dp[],ans,f[]; int main()
{
scanf("%d",&n),f[]=;
for(int i=;i<=;i++) dp[i]=,f[i]=;
for(int i=;i<=n;i++)
{
for(int j=*n;j>=;j--)
{
long long dpos=,fpos=;
for(int v=;v<=;v++)
{
if(j-v>=)
{
fpos=(fpos+f[j-v])%mod;
dpos=(dp[j-v]+dpos)%mod;
}
else break;
}
f[j]=fpos,dp[j]=dpos;
}
}
for(int i=;i<=*n;i++) ans=(ans+(dp[i]*f[i])%mod)%mod;
cout<<ans;
return ;
}
AC日记——幸运号码 51nod 1043的更多相关文章
- AC日记——ISBN号码 openjudge 1.7 29
29:ISBN号码 总时间限制: 1000ms 内存限制: 65536kB 描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x ...
- AC日记——玻璃切割 51nod 1562
玻璃切割 思路: 并查集: 离线操作: 先把每次切割都存下来: 然后从后面不断合并切割: 然后每次更新最大长和宽: 记录答案: 要开longlong: 来,上代码 #include <cstdi ...
- AC日记——最高奖励 51nod 1163
最高的奖励 思路: 排序: 时间为第一关键字,按总小到大排: 价值为第二关键字,按从大到小排: 然后,不难看出,如果两个时间不同: 那么,两个时间之间最少能做一件事: 因为他们的时间下限最少相差1: ...
- AC日记——石子归并 51nod 1021
石子归并 思路: 经典动态规划——归并类问题: 我们把状态划为n个,即1-n的n个长度为n个状态: 那么,每个长度为i的状态都可以由i-1个长度为i-1的状态推出: 所以,dp转移方程: dp[i][ ...
- AC日记——背包问题 V2 51nod 1086
有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...
- 51nod 1043 幸运号码(数位dp)
题目链接:51nod 1043 幸运号码 题解:dp[i][j]表示 i 个数和为 j 的总数(包含0开头情况) dp[i][j] = dp[i-1][j-k] i & 1 :这里用滚动数组节 ...
- 51nod 1043 幸运号码(数位dp
1043 幸运号码 1个长度为2N的数,如果左边N个数的和 = 右边N个数的和,那么就是一个幸运号码. 例如:99.1230.123312是幸运号码. 给出一个N,求长度为2N的幸运号码的数量 ...
- 51 Nod 1043 幸运号码(需重做好好体会)
转自:http://www.cnblogs.com/geloutingyu/p/6329594.html 一道非常好的dp题目. 1043 幸运号码 基准时间限制:1 秒 空间限制:131072 K ...
- AC日记——[SCOI2010]幸运数字 bzoj 1853
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2405 Solved: 887[Submit][Status] ...
随机推荐
- Jack Straws POJ - 1127 (简单几何计算 + 并查集)
In the game of Jack Straws, a number of plastic or wooden "straws" are dumped on the table ...
- mongoTemplate学习笔记
mongoTemplate的andExpression表达式 Aggregation<Post> agg = Aggregation.newAggregation( Record.clas ...
- 【Interleaving String】cpp
题目: Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given: ...
- 【palindrome partitioning II】cpp
题目: Given a string s, partition s such that every substring of the partition is a palindrome. Return ...
- 【Word Ladder II】cpp
题目: Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) ...
- IOS开发学习笔记037-九宫格代码实现
九宫格布局,用手机输入法时经常见到.先按3行3列写. 代码的实现主要是计算插入图片的位置. 每一张图片的位置和所在的行列密切相关.分析过程如下: 界面: 代码实现 1.把需要的图片资源添加进来 然后给 ...
- linux环境搭建系列之memcached安装步骤
1.从官网在线下载最新的安装包 wget http://memcached.org/downloads/memcached-1.4.34.tar.gz 该命令为在线下载 注意:最新的地址会变动,所以最 ...
- android 内存说明
MemoryInfo的Field如下 dalvikPrivateDirty: The private dirty pages used by dalvik. dalvikPss :The propor ...
- Python数据分析基础——读写CSV文件2
2.2筛选特定的行: 行中的值满足某个条件 行中的值属于某个集合 行中的值匹配于某个模式(即:正则表达式) 2.2.1:行中的值满足于某个条件: 基础python版: #!/usr/bin/env p ...
- [oldboy-django][2深入django]rest-framework教程
# rest-framework教程 - settings.py INSTALL-APPS = [ 'snippets', # app 'rest-framework', ] - 创建model # ...