正题


题目大意

求有多少个2∗n2*n2∗n位的数字(允许有前导零)满足

  1. 只包含SSS集合内的数字
  2. 前nnn位的和等于后nnn位之和或者奇数位之和和偶数位之和相等

解题思路

预处理数组fi,jf_{i,j}fi,j​表示iii位数,数字之和为jjj时的方案数。
动态转移方程
fi,j=∑k=1mfi,j−akf_{i,j}=\sum_{k=1}^mf_{i,j-a_k}fi,j​=k=1∑m​fi,j−ak​​

然后我们若不考虑两种情况重合答案就是
2∗∑i=1n(fn,i)22*\sum_{i=1}^n(f_{n,i})^22∗i=1∑n​(fn,i​)2

那我们考虑重合,那么就是奇数位等于偶数位之和且前nnn位等于后nnn位之和的情况。我们可以转换为:
前nnn位中奇数位之和===后nnn位中偶数位之和

前nnn位中偶数位之和===后nnn位中奇数位之和

这种情况就是
(∑i=1n(fn/2,i)2)∗(∑i=1n(fn−n/2,i)2)(\sum_{i=1}^n(f_{n/2,i})^2)*(\sum_{i=1}^n(f_{n-n/2,i})^2)(i=1∑n​(fn/2,i​)2)∗(i=1∑n​(fn−n/2,i​)2)
最终答案
(2∗∑i=1n(fn,i)2)−(∑i=1n(fn/2,i)2)∗(∑i=1n(fn−n/2,i)2)(2*\sum_{i=1}^n(f_{n,i})^2)-(\sum_{i=1}^n(f_{n/2,i})^2)*(\sum_{i=1}^n(f_{n-n/2,i})^2)(2∗i=1∑n​(fn,i​)2)−(i=1∑n​(fn/2,i​)2)∗(i=1∑n​(fn−n/2,i​)2)


codecodecode

#pragma GCC optimize(2)
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1010,XJQ=999983;
ll n,f[N][N*10],Z,ans,m,a[12];
char s[12];
ll C(int x)
{ll ans=0;for(int i=0;i<=x*9;i++)if(f[x][i])ans=(ans+(f[x][i]*f[x][i]))%XJQ;return ans;
}
int main()
{scanf("%lld",&n);scanf("%s",s+1);//double star=clock();m=strlen(s+1);for(ll i=1;i<=m;i++)a[i]=s[i]-'0';Z=9*n;f[0][0]=1;for(ll i=0;i<=n;i++)for(ll j=0;j<=Z;j++)if(f[i][j])for(ll k=1;k<=m;k++)f[i+1][j+a[k]]=(f[i+1][j+a[k]]+f[i][j])%XJQ;printf("%lld",(2*C(n)%XJQ-C(n/2)*C(n-n/2)%XJQ+XJQ)%XJQ);
}

jzoj3056-数字【数位dp,统计,容斥】相关推荐

  1. 青云的机房组网方案(简单+普通+困难)(虚树+树形DP+容斥)

    题目链接 1.对于简单的版本n<=500, ai<=50 直接暴力枚举两个点x,y,dfs求x与y的距离. 2.对于普通难度n<=10000,ai<=500 普通难度解法挺多 ...

  2. [XSY] 传统游戏(DP、容斥)

    传统游戏 看到题,第一想法是设dp[k][s]dp[k][s]dp[k][s]表示选了kkk个数,当前异或和为sss的方案数,但这样产生一个问题:要如何保证所选的数不重复且无序呢? 一种方法是修改状态 ...

  3. jzoj5123-diyiti【统计,容斥】

    正题 题目大意 n个木棒,求用6个木棒组成正方形的方案总数. 解题思路 这个正方形边有的木棒数两种可能3,1,1,13,1,1,13,1,1,1和2,2,1,12,2,1,12,2,1,1. 第一种可 ...

  4. Loj #6274. 数字 数位dp + 去重

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑数位dpdpdp,设计状态f[pos][flag1][flag2][flag3][flag4]f[pos][flag1][flag2][flag3 ...

  5. 小D的一串数字 (数位DP做法)

    Problem Description 小D在纸上随便写了两串数字,"23333333","0123456789".第一个串中含有7个重复的相邻的数字,第二个串 ...

  6. [XSY] 简单的博弈题(博弈+dp+组合数+容斥)

    简单的博弈题 对于贪心的对手,显然用最大的一半和他最小的一半比较判断是否全胜.(这不就是田忌赛马吗) 对于随机的对手,先考虑暴力怎么做: void check(int x,int w){if(x> ...

  7. cdqz2017-test10-加帕里图书馆(区间DP 简单容斥)

    给定一个由小写字母组成的字符串,输出有多少重复的回文子序列 #include<cstdio> #include<cstring>using namespace std;#def ...

  8. bzoj2560: 串珠子(状压dp+简单容斥)

    传送门 题意简述: n n n个点的带边权无向图,定义一个图的权值是所有边的积,问所有 n n n个点都连通的子图的权值之和. 思路: f i f_i fi​表示保证集合 i i i中所有点都连通其余 ...

  9. BZOJ4455 / UOJ185 小星星 —— 树形dp + 容斥

    题目链接:点我啊╭(╯^╰)╮ 题目大意: nnn 个点 mmm 条边的图     破坏后现在变成 nnn 个点的树     问这颗树每个点映射回原来的图的总方案数     映射即现在的两点存在边,原 ...

最新文章

  1. 180 所高校新增“人工智能”专业,人工智能火到爆!
  2. linux启动weblogic指令,linux下如何启动和关闭weblogic
  3. 【深度学习】图像自动处理工具SimpleITK的使用(Python)
  4. Linux虚拟地址空间布局
  5. vue.js 删除指定元素_vue.js删除动态绑定的radio的指定项
  6. 一份技术简历是如何搞定BAT的面试官?
  7. 160 - 30 cracking4all.1
  8. 修复Bug大幅升级 Sun发布MySQL 5.1版
  9. PhotoZoom专业版-图像无损放大工具
  10. 漫步线性代数十九——快速傅里叶变换(上)
  11. leetcode —— 39. 组合总和
  12. python如何得出数组里最大_如何理解Python里的字典dict?
  13. 常见数据类型的手机二维码生成与识别格式参考
  14. redis命令_INCR
  15. for...in、for...of、forEach()有什么区别
  16. 【软件安装】CuteFTP Pro安装过程(含安装包)
  17. 记录第二次进行的助教培训-评分
  18. 苹果手机怎么设置专属铃声?看一遍就能学会的超简单教程
  19. OAuth 2.0 教程
  20. LightSensor传感器

热门文章

  1. java file_java开发之File类详细使用方法介绍
  2. java多线程 sycophantic_Java多线程volatile和synchronized总结
  3. ajax中迭代是什么意思,Ajax 局部刷新迭代器的内容
  4. 机器学习与气象数据_气象大数据与机器学习联合实验室 大数据和气象的“联姻”...
  5. linux path减少,Linux的环境变量PATH中所带来的问题及解决方法
  6. android手机拍摄权限,react-native 手机拍照权限
  7. win10 mysql my.cnf_MySQL配置文件无法修改的解决方法(Win10)
  8. php curl 使用方法,php curl使用方法与步骤
  9. java转python推荐算法_java和python实现一个加权SlopeOne推荐算法
  10. python自然语言处理_python