jzoj3056-数字【数位dp,统计,容斥】
正题
题目大意
求有多少个2∗n2*n2∗n位的数字(允许有前导零)满足
- 只包含SSS集合内的数字
- 前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∑mfi,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,统计,容斥】相关推荐
- 青云的机房组网方案(简单+普通+困难)(虚树+树形DP+容斥)
题目链接 1.对于简单的版本n<=500, ai<=50 直接暴力枚举两个点x,y,dfs求x与y的距离. 2.对于普通难度n<=10000,ai<=500 普通难度解法挺多 ...
- [XSY] 传统游戏(DP、容斥)
传统游戏 看到题,第一想法是设dp[k][s]dp[k][s]dp[k][s]表示选了kkk个数,当前异或和为sss的方案数,但这样产生一个问题:要如何保证所选的数不重复且无序呢? 一种方法是修改状态 ...
- jzoj5123-diyiti【统计,容斥】
正题 题目大意 n个木棒,求用6个木棒组成正方形的方案总数. 解题思路 这个正方形边有的木棒数两种可能3,1,1,13,1,1,13,1,1,1和2,2,1,12,2,1,12,2,1,1. 第一种可 ...
- Loj #6274. 数字 数位dp + 去重
传送门 文章目录 题意: 思路: 题意: 思路: 考虑数位dpdpdp,设计状态f[pos][flag1][flag2][flag3][flag4]f[pos][flag1][flag2][flag3 ...
- 小D的一串数字 (数位DP做法)
Problem Description 小D在纸上随便写了两串数字,"23333333","0123456789".第一个串中含有7个重复的相邻的数字,第二个串 ...
- [XSY] 简单的博弈题(博弈+dp+组合数+容斥)
简单的博弈题 对于贪心的对手,显然用最大的一半和他最小的一半比较判断是否全胜.(这不就是田忌赛马吗) 对于随机的对手,先考虑暴力怎么做: void check(int x,int w){if(x> ...
- cdqz2017-test10-加帕里图书馆(区间DP 简单容斥)
给定一个由小写字母组成的字符串,输出有多少重复的回文子序列 #include<cstdio> #include<cstring>using namespace std;#def ...
- bzoj2560: 串珠子(状压dp+简单容斥)
传送门 题意简述: n n n个点的带边权无向图,定义一个图的权值是所有边的积,问所有 n n n个点都连通的子图的权值之和. 思路: f i f_i fi表示保证集合 i i i中所有点都连通其余 ...
- BZOJ4455 / UOJ185 小星星 —— 树形dp + 容斥
题目链接:点我啊╭(╯^╰)╮ 题目大意: nnn 个点 mmm 条边的图 破坏后现在变成 nnn 个点的树 问这颗树每个点映射回原来的图的总方案数 映射即现在的两点存在边,原 ...
最新文章
- 180 所高校新增“人工智能”专业,人工智能火到爆!
- linux启动weblogic指令,linux下如何启动和关闭weblogic
- 【深度学习】图像自动处理工具SimpleITK的使用(Python)
- Linux虚拟地址空间布局
- vue.js 删除指定元素_vue.js删除动态绑定的radio的指定项
- 一份技术简历是如何搞定BAT的面试官?
- 160 - 30 cracking4all.1
- 修复Bug大幅升级 Sun发布MySQL 5.1版
- PhotoZoom专业版-图像无损放大工具
- 漫步线性代数十九——快速傅里叶变换(上)
- leetcode —— 39. 组合总和
- python如何得出数组里最大_如何理解Python里的字典dict?
- 常见数据类型的手机二维码生成与识别格式参考
- redis命令_INCR
- for...in、for...of、forEach()有什么区别
- 【软件安装】CuteFTP Pro安装过程(含安装包)
- 记录第二次进行的助教培训-评分
- 苹果手机怎么设置专属铃声?看一遍就能学会的超简单教程
- OAuth 2.0 教程
- LightSensor传感器
热门文章
- java file_java开发之File类详细使用方法介绍
- java多线程 sycophantic_Java多线程volatile和synchronized总结
- ajax中迭代是什么意思,Ajax 局部刷新迭代器的内容
- 机器学习与气象数据_气象大数据与机器学习联合实验室 大数据和气象的“联姻”...
- linux path减少,Linux的环境变量PATH中所带来的问题及解决方法
- android手机拍摄权限,react-native 手机拍照权限
- win10 mysql my.cnf_MySQL配置文件无法修改的解决方法(Win10)
- php curl 使用方法,php curl使用方法与步骤
- java转python推荐算法_java和python实现一个加权SlopeOne推荐算法
- python自然语言处理_python