本文主要是介绍fzu 2113 Jason的特殊爱好,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题 目 传 送 门:
数位dp水题,dp[i][j]表示到第i位,1的个数为j的数的个数
ac代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int num[20];
long long dp[20][20];
long long dfs(int len,int n,int limit)
{if(len<0)return n;if(!limit&&dp[len][n]!=-1)return dp[len][n];int fp=limit?num[len]:9;long long ret=0;for(int i=0;i<=fp;i++){if(i==1)ret+=dfs(len-1,n+1,limit&&i==fp);elseret+=dfs(len-1,n,limit&&i==fp);}if(!limit)dp[len][n]=ret;return ret;
}
long long get_num(long long x)
{int len=0;while(x){num[len++]=x%10;x=x/10;}return dfs(len-1,0,1);
}
int main()
{long long n,m;memset(dp,-1,sizeof(dp));while(cin>>n>>m){long long ans=get_num(m)-get_num(n-1);cout<<ans<<endl;}return 0;
}
这篇关于fzu 2113 Jason的特殊爱好的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!