hdu 4507 吉哥系列故事——恨7不成妻 数位DP
2013-09-08 11:40
288 查看
数位DP,注意状态DP的转移
代码如下:
View Code
代码如下:
#include<iostream> #include<stdio.h> #include<algorithm> #include<iomanip> #include<cmath> #include<cstring> #include<vector> #define ll __int64 #define mod 1000000007 using namespace std; struct node { ll n,sum,pow; node():n(0),sum(0),pow(0){} }dp[20][7][7]; int bit[20]; ll p1[20]; node dfs(int pos,int m,int sum,bool f) { node p,q; if(pos==-1){ p.n=m&∑ return p; } if(!f&&dp[pos][sum][m].n!=-1) return dp[pos][sum][m]; int e=f?bit[pos]:9; for(int i=0;i<=e;i++){ if(i==7) continue; q=dfs(pos-1,(10*m+i)%7,(sum+i)%7,f&&i==bit[pos]); p.n+=q.n; p.n%=mod; p.sum+=p1[pos]*i%mod*q.n+q.sum; p.sum%=mod; p.pow+=(p1[pos]*p1[pos]%mod*i%mod*i%mod*q.n+2*p1[pos]*i%mod*q.sum%mod+q.pow); p.pow%=mod; } if(!f) dp[pos][sum][m]=p; return p; } ll cal(ll n) { int m=0; ll s=n; while(n){ bit[m++]=n%10; n/=10; } return dfs(m-1,0,0,1).pow; } int main(){ int t; ll a,b; memset(dp,-1,sizeof(dp)); p1[0]=1; for(int i=1;i<20;i++) p1[i]=p1[i-1]*10%mod; scanf("%d",&t); while(t--){ scanf("%I64d%I64d",&a,&b); printf("%I64d\n",(cal(b)-cal(a-1)+mod)%mod); } return 0; }
View Code
相关文章推荐
- HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
- HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
- hdu 4507 吉哥系列故事——恨7不成妻 (数位dp)
- HDU 4507 吉哥系列故事——恨7不成妻 数位DP
- HDU 4507 吉哥系列故事――恨7不成妻 数位DP
- hdu 4507 - 吉哥系列故事——恨7不成妻(数位dp)
- hdu 4507 吉哥系列故事——恨7不成妻 数位dp 求平方和
- HDU 4507 吉哥系列故事——恨7不成妻 数位dp
- HDU-4507 吉哥系列故事――恨7不成妻 (数位dp)
- HDU 4507 吉哥系列故事――恨7不成妻 (高级数位DP)【模板】
- HDU - 4507 吉哥系列故事——恨7不成妻 (数位DP&记忆化dfs)好题
- HDU - 4507 吉哥系列故事――恨7不成妻 (数位DP,推公式啊)
- 【数位dp && 数学技巧】HDU - 4507 吉哥系列故事――恨7不成妻
- HDU 4507 吉哥系列故事——恨7不成妻[数位dp]
- HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
- 【数位DP+数学关系推导】吉哥系列故事——恨7不成妻 HDU - 4507
- 【数位dp】HDU 4507 吉哥系列故事――恨7不成妻(求所有满足数的平方和)
- hdu 4507 吉哥系列故事——恨7不成妻 (数位DP求和)
- 【HDU】4507 吉哥系列故事——恨7不成妻 数位DP
- Hdu-4507 吉哥系列故事——恨7不成妻(数位DP)