1043 幸运号码 数位DP】的更多相关文章

题目链接:51nod 1043 幸运号码 题解:dp[i][j]表示 i 个数和为 j 的总数(包含0开头情况) dp[i][j] = dp[i-1][j-k] i & 1 :这里用滚动数组节省内存 非0开头的情况 * 0开头的情况:(dp[n&1][i]-dp[(n-1)&1][i]) *dp[n&1][i],最后将其累加即为结果. #include<cstdio> #include<algorithm> #include<cstring&g…
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…
1043 幸运号码     1个长度为2N的数,如果左边N个数的和 = 右边N个数的和,那么就是一个幸运号码. 例如:99.1230.123312是幸运号码. 给出一个N,求长度为2N的幸运号码的数量.由于数量很大,输出数量 Mod 10^9 + 7的结果即可. Input 输入N(1<= N <= 1000) Output 输出幸运号码的数量 Mod 10^9 + 7 Input示例 1 Output示例 9 看的网上的题解 但是觉得他们写的还是有问题的 用dp[i][j]表示i个数的和为j…
转自:http://www.cnblogs.com/geloutingyu/p/6329594.html 一道非常好的dp题目. 1043 幸运号码  基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 1个长度为2N的数,如果左边N个数的和 = 右边N个数的和,那么就是一个幸运号码. 例如:99.1230.123312是幸运号码. 给出一个N,求长度为2N的幸运号码的数量.由于数量很大,输出数量 Mod 10^9 + 7的结果即可. Input…
#include <stdio.h> #include <algorithm> using namespace std; typedef long long ll; ; ][]; // dp[i][j] : i 个数,组成总和为j 的数量 int main() { int n; scanf("%d", &n); dp[][] = ; ; i <= ; i++) dp[][i] = ; ; i <= n; i++) { ; j <= *…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1043 1043 幸运号码 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 1个长度为2N的数,如果左边N个数的和 = 右边N个数的和,那么就是一个幸运号码. 例如:99.1230.123312是幸运号码. 给出一个N,求长度为2N的幸运号码的数量.由于数量很大,输出数量 Mod 10^9 + 7的结果即可. Input 输…
B吉利数字时限:1s [题目描述]算卦大湿biboyouyun最近得出一个神奇的结论,如果一个数字,它的各个数位相加能够被10整除,则称它为吉利数.现在叫你计算某个区间内有多少个吉利数字. [输入]第一行为样例个数N.接下来N行,每一行代表一个输入样例,每个输入样例有2个数,分别代表某个区间的起点a和终点b.注意所求区间为[a,b],1<=a<=b<=10^9 [输出]N行.对于第x个输入样例,在第x行输入该样例所对应的结果. [输入样例]21 101 20 [输出样例]01 [Hint…
个人心得:数位dp处理起来是真的麻烦,本来动态规划就够头疼的了,菜的一批. 来看这个题目吧,题目在下面. 把题目变成可以求得就是求前n个数中1-n*9的情况的总和,所以用dp[i][j],表示前i个数中和为j的个数. 状态转移方程就是 dp[i][j]=dp[i-1][j-k]  0=<k<=9; 但是后面要注意前导为0的情况所以总和ans=(dp[i][j]-dp[i-1][j])*dp[i][j](后面N段不需要考虑前导为0的情况,前面前导为0的情况就是前n-1位中和为j的值) 脑瓜子还是…
幸运号码 思路: 传说中的数位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维: 来,上代码: #includ…
题目背景 SOURCE:NOIP2015-GDZSJNZX(难) 题目描述 Mike 正在在忙碌地发着各种各样的的短信.旁边的同学 Tom 注意到,Mike 发出短信的接收方手机号码似乎都满足着特别的性质,难道Mike 的好朋友是满足正态分布的?Tom 很好奇. 由于 Mike 有着自己最喜欢的数字 a ,并且 a 的范围是:2≤a≤9 .Tom 从这里入手,发现了一些端倪,假设 Mike 发的电话号码是一个十进制数字 S ,Tom 发现 S 会满足以下三个性质中的一个: 1.S 是 a 的倍数…