2020牛客暑期多校训练营(第六场)H

Harmony Pairs

https://ac.nowcoder.com/acm/contest/5671/H

题目描述

  Roundgod is obsessive about numbers. Let be the sum of the digits of in decimal notation, is a harmony pair if and only if . Roundgod is given , and she wants to count the number of harmony pairs modulo satisfying .

输入描述

  The only line of input contains one integer .

输出描述

  Output one integer indicating the answer.

示例1

输入

100

输出

967

  比较套路的数位 问题。
   的数位长度为 ,同时构造 的第 位(数位自左向右,左边的数位小),采用记忆化搜索的形式。 表示对 的限制,限制 表示对 的限制,限制 。定义 表示 位, 时,构造 的方案数。由于 有可能为负数,所以需要加上 的偏移量。

代码

/******************************************************************
Copyright: 11D_Beyonder All Rights Reserved
Author: 11D_Beyonder
Problem ID: 2020牛客暑期多校训练营(第六场) Problem H
Date: 8/27/2020
Description: Digit Dynamic Programming
*******************************************************************/
#include<iostream>
#include<cstring>
using namespace std;
const int N=102;
const int mod=1000000007;
int f[N][N*22][2][2];
int number[N];
int len;
char str[N];
int dfs(int pos,int difference,bool limit1,bool limit2){
    if(pos==len+1){
        //减去偏移量差值大于0表示可行
        return difference>1000;
    }
    if(~f[pos][difference][limit1][limit2]){
        return f[pos][difference][limit1][limit2];
    }
    int res1=limit1?number[pos]:9;
    int ans=0;
    for(register int i=0;i<=res1;i++){
        //枚举B的数位
        int res2=limit2?i:9;
        for(register int j=0;j<=res2;j++){
            //枚举A的数位
            ans+=dfs(pos-1,difference+j-i,i==res1&&limit1,i==j&&limit2);
            ans%=mod;
        }
    }
    f[pos][difference][limit1][limit2]=ans;
    return f[pos][difference][limit1][limit2];
}
int main(){
    cin>>(str+1);
    len=strlen(str+1);
    //12345
    for(register int i=1;i<=len;i++){
        //按照习惯排列
        number[i]=str[i]-'0';
    }
    memset(f,-1,sizeof(f));
    cout<<dfs(1,1000,1,1)<<endl;
    return 0;
}
牛客暑期多校训练营题解 文章被收录于专栏

收集牛客暑期多校训练营的题解

全部评论

相关推荐

程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务