怎么说,数位DP还是我的噩梦啊,细节太恐怖了。

但是这章感觉又和之前的学的数位DP有差异?(应该是用DP预处理降低时间复杂度,好劲啊,不过以前都是记忆化搜索的应该不会差多少)

poj3208 f[i][0~2]表示第i位,开头连续j个6的情况数,[3]表示魔鬼数的个数,这样可以方便得出区间内有多少魔鬼数,不停的试填到底即可。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL; LL f[][];
void initf()
{
f[][]=;
f[][]=,f[][]=,f[][]=f[][]=;
for(int i=;i<=;i++)
{
f[i][]=*(f[i-][]+f[i-][]+f[i-][]);
f[i][]=f[i-][];
f[i][]=f[i-][];
f[i][]=f[i-][]+*f[i-][];
}
}
int main()
{
initf();
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int w=;while(f[w][]<n)w++; int h6=;
for(int i=w;i>=;i--)
{
for(int j=;j<=;j++)
{
LL cc=f[i-][];
if(j==||h6==)
for(int k=max(-h6-(j==),);k<=;k++)cc+=f[i-][k]; if(cc<n)n-=cc;
else
{
if(h6<)
{
if(j==)h6++;
else h6=;
}
printf("%d",j);
break;
}
}
}
printf("\n");
}
return ;
}

poj3208

月之谜 这题找不到原题,但是lyd有数据。一个看似很复杂多余实则很重要的定义:f[i][j][k][p]表示位数为i,数字和为j,对k取模等于p的数的个数,k这一维无法省略,原因是当前面增加一个数字j改变对应的模数也改变。预处理完了,就一位一位枚举,只有上限边缘是无法确定值的,上限之下都可以通过预处理求得。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
int MOD(int d,int mod){return (d%mod+mod)%mod;} int mi[],f[][][][];
void initf()
{
mi[]=;for(int i=;i<=;i++)mi[i]=mi[i-]*; memset(f,,sizeof(f));
for(int j=;j<=;j++)
for(int k=;k<=;k++)
f[][j][k][j%k]++;
for(int i=,mi=;i<=;i++,mi*=)
{
for(int m=;m<=;m++)
for(int j=m;j<=;j++)
for(int k=;k<=;k++)
for(int p=;p<;p++)
f[i][j][k][p]+=f[i-][j-m][k][MOD(p-mi*m,k)];
}
} int maxw(int i)
{
int ret=;
while(i!=)i/=,ret++;
return ret;
}
int getnum(int x,int i){return x/(mi[i])%;}
bool calc(int x)
{
int k=x,sum=;
while(k!=)sum+=k%,k/=;
if(sum==)return ;
return x%sum==;
} int getmoon(int x,int sum,int pun,int i)
{
if(i==)
{
int num=getnum(x,),ret=;
for(int i=;i<=num;i++)
{
x=x-x%+i;
if(calc(x)==true)ret++;
}
return ret;
} int num=getnum(x,i),ret=;
for(int m=;m<num;m++)
{
for(int j=max(,sum+m);j<=;j++)
ret+=f[i-][j-(sum+m)][j][MOD(-pun-mi[i]*m,j)];
}
ret+=getmoon(x,sum+num,pun+mi[i]*num,i-);
return ret;
} int main()
{
freopen("mystery.in","r",stdin);
freopen("mystery.out","w",stdout);
initf();
int L,R;
while(scanf("%d%d",&L,&R)!=EOF)
{
if(L==)printf("%d\n",getmoon(R,,,maxw(R)));
else printf("%d\n",getmoon(R,,,maxw(R))-getmoon(L-,,,maxw(L-)));
}
return ;
}

月之谜

0x5C 数位统计DP的更多相关文章

  1. 动态规划——区间DP,计数类DP,数位统计DP

    本博客部分内容参考:<算法竞赛进阶指南> 一.区间DP 划重点: 以前所学过的线性DP一般从初始状态开始,沿着阶段的扩张向某个方向递推,直至计算出目标状态. 区间DP也属于线性DP的一种, ...

  2. $BZOJ1799\ Luogu4127$ 月之谜 数位统计$DP$

    AcWing Description Sol 看了很久也没有完全理解直接$DP$的做法,然后发现了记搜的做法,觉得好棒! 这里是超棒的数位$DP$的记搜做法总结   看完仿佛就觉得自己入门了,但是就像 ...

  3. $Poj3208$ 启示录 数位统计$DP$

    Poj  AcWing Description Sol  这题长得就比较像数位$DP$叭. 所以先用$DP$进行预处理,再基于拼凑思想,通过"试填法"求出最终的答案. 设$F[i] ...

  4. Codeforces 55D Beautiful Number (数位统计)

    把数位dp写成记忆化搜索的形式,方法很赞,代码量少了很多. 下面为转载内容:  a positive integer number is beautiful if and only if it is  ...

  5. [ACM] ural 1057 Amount of degrees (数位统计)

    1057. Amount of Degrees Time limit: 1.0 second Memory limit: 64 MB Create a code to determine the am ...

  6. [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)

    [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...

  7. bzoj 1026 DP,数位统计

    2013-11-20 08:11 原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1026 首先我们用w[i,j]表示最高位是第i位,且是j的 ...

  8. 【XSY2668】排列统计 DP

    题目描述 给你一个长度为\(n\)的排列\(a\),每次要选择两个数,交换这两个数(这两个数可以相同).总共要交换\(k\)次. 最后要统计数列中有多少位置\(i\)满足\(\max_{j\leq i ...

  9. [BZOJ3992][SDOI2015]序列统计(DP+原根+NTT)

    3992: [SDOI2015]序列统计 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1888  Solved: 898[Submit][Statu ...

随机推荐

  1. Discuze修改用户名长度限制

    第一步,在网站 uc_client\model 目录下的 user.php文件中,找到如下代码: ? 1 if($len > 15 || $len < 3 || preg_match(&q ...

  2. elasticsearch5.3.0 bulk index 性能调优实践

    elasticsearch5.3.0 bulk index 性能调优实践 通俗易懂

  3. 2A课程笔记分享_StudyJams_2017

    课程2A 概述 课程2A.2B的内容主要是关于创建交互式应用的基础知识.之前的L1课程主要是Android UI的基础设计知识,基本上没涉及到编程. 2A的讲解主要包括:使用变量来更新欲显示在屏幕上的 ...

  4. SQL语言入门

    内容来源:唐成. PostgreSQL修炼之道[M]. 机械工业出版社, 2015. 此书购买链接:京东 亚马逊 SQL(Structured Query Language) 结构化查询语言 1. 语 ...

  5. 【sqli-labs】 less26a GET- Blind based -All you SPACES and COMMENTS belong to us -String-single quotes-Parenthesis(GET型基于盲注的去除了空格和注释的单引号括号注入)

    这个和less26差不多,空格还是用%a0代替,26过了这个也就简单了 ;%00 可以代替注释,尝试一下 order by 3 http://192.168.136.128/sqli-labs-mas ...

  6. 浅谈Overload和Override的区别

    如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding).如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Over ...

  7. 微信小程序中的iPhone X适配问题

    微信小程序中的iPhone X适配问题 小程序中下方的导航会被iPhone X下面的那条黑线盖住[微笑脸],所以要专门为了iPhone X做样式上的适配[微笑脸] wx.getSystemInfo({ ...

  8. 第八章 Python之常用模块

    日志模块 import logging import logging #默认级别为warning,默认打印到终端 logging.debug( logging.info( logging.warnin ...

  9. pyqt5 做的小程序,可以用来UI做个小demo

    #!/usr/bin/python3# -*- coding: utf-8 -*- """ZetCode PyQt5 tutorial This program crea ...

  10. es6-Symbol用法

    1.symbol概念 这种数据类型提供独一无二值 比如,在JS中,我可以通过数据类型生成变量a=number05,也可以生成b=nubmer05,这两个变量可以说是相等的. 但是用symbol生成的值 ...