Codeforces 258B - Little Elephant and Elections
来源:互联网 发布:自学电脑办公软件 编辑:程序博客网 时间:2024/05/22 14:07
从
我们按照4和7的个数对[1,m]的数做等价类划分。然后dfs就好。前半部分可以用数位dp解决。
#include<bits/stdc++.h>using namespace std;const int maxn = 12,mod = 1e9+7;#define LL long long LL dp[maxn][2][maxn];int num[maxn];LL dfs(int pos,bool bnd,int ned){ if(ned < 0) return 0; if(pos < 0) return ned == 0; LL & ndp = dp[pos][bnd][ned]; if(~ndp) return ndp; ndp = 0; int bound = bnd ? num[pos] : 9 ; for(int i=0;i<=bound;i++) ndp += dfs(pos-1,bnd && i == bound,ned - (i==4||i==7) ); return ndp;}LL cnt[maxn];int init(LL x){ int len = 0; while(x){ num[len++] = x % 10; x /= 10; } memset(dp,-1,sizeof(dp)); for(int i=len;i>=0;i--){ cnt[i] = dfs(len-1,true,i); } cnt[0]--; return len;}LL ans;void dfs(int st,LL v,int len,int adder){ if(st == 7){ for(int i=adder+1;i<=len;i++){ (ans += v * cnt[i] % mod) %= mod; } return; } if(adder >= len) return; for(int i=0;i<=len;i++){ if(cnt[i] == 0) continue; LL mid = v * cnt[i] % mod; cnt[i]--; dfs(st+1,mid,len,adder+i); cnt[i]++; }}int main(){ LL n; scanf("%I64d",&n); int len = init(n); ans = 0; dfs(1,1,len,0); printf("%I64d\n",ans); return 0;}
0 0
- Codeforces-258B Little Elephant and Elections
- Codeforces 258B Little Elephant and Elections
- Codeforces 258B - Little Elephant and Elections
- codeforces 258B Little Elephant and Elections 数位DP+DFS
- CodeForces 258B Little Elephant and Elections 数位DP
- codeforces 258B - Little Elephant and Elections 数位DP
- codeforces 258B Little Elephant and Elections 数位DP+排列组合
- Codeforces 258B. Little Elephant and Elections【数位DP,DFS】
- CF 258B Little Elephant and Elections
- Codeforces Round #157 (Div. 1) B. Little Elephant and Elections
- [Codeforces 258B & 259 D]Little Elephant and Elections 数位dp+dfs
- CF 258B Little Elephant and Elections [dp+组合]
- Codeforces Round #157 (Div. 1)B. Little Elephant and Elections 数位dp好
- Codeforces Round #157 (Div. 1) B. Little Elephant and Elections 数位dp
- 数位dp + dfs + 逆元求余 CF 258 B. Little Elephant and Elections
- Codeforces 220B Little Elephant and Array
- CodeForces 220B Little Elephant and Array
- CodeForces 204B - Little Elephant and Cards
- Linux问题Epoll参考资源
- 努力做自己 做自己所想 做自己想做
- 斐波那契数列
- 支付宝 app支付异常摘记 -- ALI40247
- 第五周—求两个数的正差值
- Codeforces 258B - Little Elephant and Elections
- windows下面如何将桌面上显示的数据从内存取出来
- VS2010-配置OpenGL
- iwebshop中的增删改查
- window图像设备接口及绘图
- 总结一下android app引导页
- SO_KEEPALIVE选项解释
- 远程计算机或设备将不接受连接,IE无法上网
- 两个曲柄滑块机构组成简单机械系统