【ARC102E】Stop. Otherwise...(容斥原理,动态规划)

题面

AtCoder

有\(n\)个骰子,每个骰子有\(K\)个面,上面有\(1\)到\(K\)。骰子都是一样的。

现在对于\([2,2k]\)中的每一个数\(x\),要求出满足不存在任意两个骰子的点数和为\(x\)的方案数。

题解

显然这个东西是一个容斥计算的过程。

而两两之间的点数和恰好为\(x\)的配对方案数也是有限的。

那么枚举至少出现了\(k\)不合法的数字配对的情况。

得到了:

\[Ans=\sum_{i=0}^i (-1)^t{t\choose i}{n-2i+k-1\choose k-1}
\]

其中\(t\)表示能够拼出\(x\)的无序点对数。

#include<iostream>
#include<cstdio>
using namespace std;
#define MOD 998244353
#define MAX 4040
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
int jc[MAX],jv[MAX],inv[MAX],n,k,tot[MAX];
int C(int n,int m){return 1ll*jc[n]*jv[m]%MOD*jv[n-m]%MOD;}
int main()
{
scanf("%d%d",&k,&n);
jc[0]=jv[0]=inv[0]=inv[1]=1;
for(int i=2;i<=n+k;++i)inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<=n+k;++i)jc[i]=1ll*jc[i-1]*i%MOD;
for(int i=1;i<=n+k;++i)jv[i]=1ll*jv[i-1]*inv[i]%MOD;
for(int i=1;i<=k;++i)tot[i+1]+=1,tot[i+k+1]-=1;
for(int i=1;i<=k+k;++i)tot[i]+=tot[i-1];
for(int i=2;i<=k+k;++i)
{
int cnt=(tot[i]+1)/2,ans=0;
for(int j=0,d=1;j<=cnt&&j+j<=n;++j,d=MOD-d)
add(ans,1ll*d*C(cnt,j)%MOD*C(n-2*j+k-1,k-1)%MOD);
printf("%d\n",ans);
}
return 0;
}

然后听\(ppl\)说还有一种\(dp\)方法。

因为每一对无序对中,都只能选择恰好一个,所以设\(f[i][j]\)表示从\(i\)个无序对中恰好选择了\(j\)个的方案数,每个组里面至少要选择一个。

那么转移就是\(f[i][j]=2*f[i-1][j-1]+f[i][j-1]\)。

转移的两部分是这样子看的,前半部分是选择一个新组,可以从两个中任选一个,否则强制选择上一组,并且只能选择之前选过的那一个。

那么得到每个组可以不选东西的方案数\(\displaystyle g[i][j]=\sum_{k=0}^i {i\choose k}f[k][j]\)。即考虑选择了几个组,然后计算一下方案数。

这样子一来询问的时候只需要询问的考虑就行了。

当\(x\)为奇数的时候,那么直接枚举多少个可能构成组,然后剩下的在范围外,随意组合。

当\(x\)为偶数的时候,特殊考虑是否选择\(x/2\),选了就只能选一个,然后组合数考虑。

求\(g\)的时候用\(NTT\)优化,时间复杂度\(O(n^2log)\)

没有代码,要代码的话,戳ppl博客

【ARC102E】Stop. Otherwise...(容斥原理,动态规划)的更多相关文章

  1. Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1747  Solved: 1015[Submit][Stat ...

  2. UOJ#185. 【ZJOI2016】小星星 容斥原理 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ185.html 题解 首先暴力DP是 $O(3^nn^3)$ 的,大家都会. 我们换个方向考虑. 假设我们 ...

  3. 51Nod1317 相似字符串对 容斥原理 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1317.html 题目传送门 - 51Nod1317 题意 称一对字符串(A,B)是相似的,当且仅当满 ...

  4. BZOJ1042 HAOI2008硬币购物(任意模数NTT+多项式求逆+生成函数/容斥原理+动态规划)

    第一眼生成函数.四个等比数列形式的多项式相乘,可以化成四个分式.其中分母部分是固定的,可以多项式求逆预处理出来.而分子部分由于项数很少,询问时2^4算一下贡献就好了.这个思路比较直观.只是常数巨大,以 ...

  5. bzoj1042: [HAOI2008]硬币购物

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  6. 【BZOJ5302】[HAOI2018]奇怪的背包(动态规划,容斥原理)

    [BZOJ5302][HAOI2018]奇怪的背包(动态规划,容斥原理) 题面 BZOJ 洛谷 题解 为啥泥萌做法和我都不一样啊 一个重量为\(V_i\)的物品,可以放出所有\(gcd(V_i,P)\ ...

  7. 【arc093f】Dark Horse(容斥原理,动态规划,状态压缩)

    [arc093f]Dark Horse(容斥原理,动态规划,状态压缩) 题面 atcoder 有 \(2^n\) 名选手,编号为 \(1\) 至 \(2^n\) .现在这 \(2^n\) 名选手将进行 ...

  8. 【BZOJ1042】硬币购物(动态规划,容斥原理)

    [BZOJ1042]硬币购物(动态规划,容斥原理) 题面 BZOJ Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬 ...

  9. 【BZOJ1471】不相交路径 题解(拓扑排序+动态规划+容斥原理)

    题目描述 在有向无环图上给你两个起点和终点分别为$a,b,c,d$.问有几种路径方案使得能从$a$走到$b$的同时能从$c$走到$d$,且两个路径没有交点. $1\leq n\leq 200,1\le ...

随机推荐

  1. redis 配置 架构 基础

    redis 官网  redis.io   io为某国家域名后缀 有redis各种版本. java 版本 又分各种工具 clients 下 RedisClient为图形化管理界面 Jedis 才是jav ...

  2. ionic Cannot find module 'internal/fs'问题

    最近升级了node.js到7.3.0之后,在用cordoval add plugin XXX 命令安装插件的时候报"Cannot find module 'internal/fs'" ...

  3. C# 调用微信接口上传素材和发送图文消息

    using Common;using Newtonsoft.Json.Linq;using System;using System.IO;using System.Net;using System.T ...

  4. Java HTML to PDF 支持SVG

    尝试一 (现用框架的基础上改动,影响最小化) 最早使用的框架 Xhtmlrenderer,需要把HTML转换成XHTML,引入第二个框架Tidy,Tidy与2010年停止更新,github上的项目也停 ...

  5. 谈谈ThreadLocal的设计及不足

    用Java语言开发的同学对 ThreadLocal 应该都不会陌生,这个类的使用场景很多,特别是在一些框架中经常用到,比如数据库事务操作,还有MVC框架中数据跨层传递.这里我们简要探讨下 Thread ...

  6. 大数据处理过程核心技术ETL详细介绍

    架构挑战 1.对现有数据库管理技术的挑战. 2.经典数据库技术并没有考虑数据的多类别(variety).SQL(结构化数据查询语言),在设计的一开始是没有考虑到非结构化数据的存储问题. 3.实时性技术 ...

  7. 图像数据增强 (Data Augmentation in Computer Vision)

    1.1 简介 深层神经网络一般都需要大量的训练数据才能获得比较理想的结果.在数据量有限的情况下,可以通过数据增强(Data Augmentation)来增加训练样本的多样性, 提高模型鲁棒性,避免过拟 ...

  8. OpenVPN简单部署笔记

    打算在IDC机房部署VPN环境,Openvpn也是一个不错的选择:开源,好用,而且免费. OpenVPN简单介绍OpenVPN是一个用于创建虚拟专用网络(Virtual Private Network ...

  9. @Scheduled 定时

    此文章记录在spring boot项目中的使用 1,在项目的启动类中加注解@EnableScheduling,表示此项目可以进行定时 @SpringBootApplication @EnableSch ...

  10. 第三周作业(三)---WordCounter

    需求是这样的.写出一个程序,模仿wc.exe,可以统计出文件的一些信息(比如字符数.单词数目等等) 对于这个程序,我仍然用我从大一学来的C语言写的. 第一步:打开文件 printf("请输入 ...