题目链接:

option=com_onlinejudge&Itemid=8&page=show_problem&problem=4540">点击打开链接

题意:

给定一个数,又一次排列这个数的各个位置使得

1、无前导0

2、能被11整除

问:

有多少种组合方法

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int mod = 1000000000 + 7;
const int N = 100+2;
const int L = 50+2;
const int M = L*9; char s[N];
int x, sum, len, app[10];
int C[N][N], d[10][L][M], g[N][N], tot[12]; int c(int x, int y) {
if (~C[x][y])
return C[x][y];
if (x == 1 || y==0)
return C[x][y] = 1;
C[x][y] = 0;
for (int i = 0; i <= y; ++i)
C[x][y] = (C[x][y] + c(x-1, y-i))%mod;
return C[x][y];
}
void work() {
int v;
len = strlen(s);
sum = 0;
memset(app, 0, sizeof app);
for (int i = 0; i < len; ++i) {
++ app[s[i]-'0'];
sum += s[i]-'0';
}
tot[0] = 0;
for (int i = 1; i <= 9; ++i)
tot[i] = tot[i-1] + app[i];
x = (len+1)/2;
memset(d, 0, sizeof d);
d[0][0][0] = 1;
for (int i = 0; i <= 8; ++i)
for (int j = 0; j <= x && j <= tot[i]; ++j)
for (int s = 0; s <= j*9; ++s)
if (d[i][j][s] > 0)
for (int k = 0; k <= app[i+1] && k+j <= x; ++k) {
v = (ll)d[i][j][s] * c(j+1,k) % mod;
v = (ll)v*g[len-x-tot[i]+j][app[i+1]-k]%mod;
d[i+1][j+k][s+k*(i+1)] = (d[i+1][j+k][s+k*(i+1)] + v)%mod;
}
int ans = 0;
for (int j = 1; j <= x; ++j)
for (int s = 0; s <= j*9; ++s)
if (d[9][j][s] > 0 && abs(sum-s-s) % 11 == 0) {
int k = x - j;
if (k > app[0])
continue;
ans += (ll)d[9][j][s] * c(j,k) % mod;
ans %= mod;
}
printf("%d\n", ans);
}
int main() {
memset(C, -1, sizeof C);
memset(g, 0, sizeof g);
for (int i = 0; i < N; ++i) {
g[i][0] = g[i][i] = 1;
for (int j = 1 ; j < i; ++j)
g[i][j] = (g[i-1][j] + g[i-1][j-1])%mod;
}
while (~scanf("%s", s))
work();
return 0;
}

最新文章

  1. java疑问-继承问题
  2. 解决IIS Express 80端口被占用的情况
  3. 找出字符串中第一个不重复的字符(JavaScript实现)
  4. 2015 年 JavaScript 开发者调查报告
  5. 用java在mysql中随机插入9000 000条数据
  6. Sql中判断&quot;库、表、列,视图,存储过程&quot;是否存在
  7. centos系统使用技巧
  8. STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)(转)
  9. POJ 1226 Substrings(后缀数组+二分答案)
  10. 13 用Css做下拉菜单
  11. Go语言操作MySQL数据库
  12. linux xfs的一次io异常导致的crash
  13. JavaScript中解决计算精度丢失的问题
  14. AngularJs中,如何在ng-repeat完成之后,执行Js脚本
  15. Linux出现Read-only file system错误的解决方法
  16. BZOJ1296 [SCOI2009]粉刷匠 动态规划 分组背包
  17. Java体系基本概念
  18. Eclipse 合并GIT分支
  19. 我们为何放弃Eclipse,投奔IntelliJ IDEA
  20. redis清除数据/xargs使用

热门文章

  1. smail修改字符串 汉字
  2. 【hihoCoder 第133周】【hihoCoder 1467】2-SAT&#183;hihoCoder音乐节
  3. BZOJ 4031 [HEOI2015]小Z的房间(Matrix-Tree定理)
  4. 【FFT(母函数)+容斥】BZOJ3771-Triple
  5. 【树状数组逆序对】USACO.2011JAN-Above the median
  6. codevs 1349 板猪的火车票
  7. [转]MySQL 数据类型(二)
  8. #Java Web累积#表格&lt;table&gt;中隐藏列做备用数据
  9. Android内存优化5 了解java GC 垃圾回收机制3
  10. 三分钟教你学Git(十八) - 重写历史