杠杆数

看了一天的二分图&可撤销并查集(因为没找到合适的博客,很浪费时间).水一发数位dp(表示我今天做了题),这个题目贼套路...具体看注释...

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=20,M=2000;
ll f[N][N][M];//到了i这个位子,支柱是j,和为k且没有限制的数的个数.
int a[N];
ll dfs(int len,int pos,int sum,bool limit)//同dp定义,limit表示这位有没有限制.
{
    if(len==0)  return sum==0;
    if(sum<0)   return 0;
    if(!limit&&f[len][pos][sum]!=-1)    return f[len][pos][sum];
    //三个数位dp而已.
    ll temp=0;
    int up=limit?a[len]:9;
    for(int i=0;i<=up;i++)  temp+=dfs(len-1,pos,sum+i*(len-pos),limit&&(up==i));
    if(!limit)  f[len][pos][sum]=temp;
    return temp;
}

ll solve(ll x)//分解x并对于位数做dfs
{
    int len=0;
    while(x)
    {
        a[++len]=x%10;
        x/=10;
    }ll ans=0;
    for(int i=1;i<=len;i++) ans+=dfs(len,i,0,1);
    return ans-len+1;
}

int main()
{
    ll l,r;
    cin>>l>>r;
    memset(f,-1,sizeof f);
    cout<<solve(r)-solve(l-1)<<endl;
    return 0;
}
lpt的小屋 文章被收录于专栏

我想要一份甜甜的爱情

全部评论

相关推荐

12-14 11:43
黑龙江大学 Java
用微笑面对困难:确实比较烂,可以这么修改:加上大学的qs排名,然后大学简介要写一些,然后硕士大学加大加粗,科研经历第一句话都写上在复旦大学时,主要负责xxxx,简历左上角把学校logo写上,建议用复旦大学的简历模板
点赞 评论 收藏
分享
安静的鲸鱼offer...:神仙级别hr,可遇不可求,甚至他可能也是突然有感而发。只能说遇上是件幸事。
秋招开始捡漏了吗
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

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