zoukankan      html  css  js  c++  java
  • 数位dp模板 [dp][数位dp]

    现在才想到要学数位dp,我是不是很弱

    答案是肯定的

    以一道自己瞎掰的题为模板

     1 //题:
     2 //输入数字n 
     3 //从0枚举到n,计算这n+1个数中含有两位数a的数的个数
     4 //如12930含有两位数93 
     5 #include<cstdio>
     6 #include<cstring>
     7 #include<iostream>
     8 using namespace std;
     9 
    10 int n,m=0,a,g1,g2;
    11 int dp[10][10][2],lim[10];
    12 
    13 void init(){
    14     scanf("%d%d",&n,&a);
    15     g1=a/10;  g2=a%10;
    16     int nn=n;while(nn){
    17         lim[++m]=nn%10;
    18         nn/=10;
    19     }
    20 }
    21 
    22 int dfs(int pos,int pre,bool status,bool limit){
    23     printf("dfs(%d,%d,%d,%d)
    ",pos,pre,status,limit);
    24     if(pos<1)  return status;
    25     //已找到答案的嘿嘿嘿 
    26     if(!limit&&dp[pos][pre][status]!=-1)  return dp[pos][pre][status];
    27     
    28     int end=limit?lim[pos]:9;
    29     int ret=0;
    30     
    31     for(int i=0;i<=end;i++)
    32         ret+=dfs(pos-1,i,status||(pre==g1&&i==g2),limit&&(i==end));
    33     
    34     //没有限制才能记录答案 
    35     return limit?dp[pos][pre][status]=ret:ret;
    36 }
    37 
    38 int main(){
    39     init();
    40     memset(dp,-1,sizeof dp);
    41     printf("%d
    ",dfs(m,0,0,1));
    42     return 0;
    43 } 
  • 相关阅读:
    字符编码乱码处理
    字典,元组,集合的使用
    三级菜单 ,求1
    运算符 if和while的使用
    if条件判断和while循环
    基本数据类型的结构和使用方法
    计算机基础部分
    计算机基础
    数据库之表查询,单表、多表,子查询
    google map API 学习
  • 原文地址:https://www.cnblogs.com/ZYBGMZL/p/7214225.html
Copyright © 2011-2022 走看看