[agc001E]BBQ Hard[组合数性质+dp]
Description
Solution
题目简化后要求的实际上是$\sum _{i=1}^{n-1}\sum _{j=i+1}^{n}C^{A[i]+A[j]}_{A[i]+A[j]+B[i]+B[j]}$
这时看看n的数据范围瞬间绝望qaq。
不过看到A,B的数据范围似乎明白了什么。。。好像是O(n2)的是不是?
关键:从(0,0)走到(m,n)且只能往上和右走的方案数为$C_{n+m}^{n}$
所以$C^{A[i]+A[j]}_{A[i]+A[j]+B[i]+B[j]}$等价于从(-A[i],-B[i])到(A[j],B[j])并且只能往上和右走的方案数。
em突然开心。我们把所有dp[2000-A[i]][2000-B[i]]++。
转移$dp[i][j]=dp[i-1][j]+dp[i][j-1]$显然。
接着我们到dp[2000+A[i]][2000+B[i]]处统计答案。不过要减去从(2000-A[i],2000-B[i]])到(2000+A[i],2000+B[i]])的方案数(直接组合数)
最后答案除以2。
Code
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- using namespace std;
- const int mod=1e9+;
- typedef long long ll;
- ll fac[],inv[],ans=;
- int n;
- int a[],b[],f[][];
- ll C(int x,int y){return fac[x]*inv[y]%mod*inv[x-y]%mod;}
- int main()
- {
- fac[]=fac[]=inv[]=inv[]=;
- for (int i=;i<=;i++) fac[i]=i*fac[i-]%mod,inv[i]=(mod-mod/i)*inv[mod%i]%mod;
- for (int i=;i<=;i++) inv[i]=inv[i]*inv[i-]%mod;
- scanf("%d",&n);
- for (int i=;i<=n;i++)
- {
- scanf("%d%d",&a[i],&b[i]);
- f[-a[i]][-b[i]]++;
- }
- for (int i=;i<=;i++) for (int j=;j<=;j++)
- {
- if (i) f[i][j]+=f[i-][j];if (f[i][j]>=mod) f[i][j]-=mod;
- if (j) f[i][j]+=f[i][j-];if (f[i][j]>=mod) f[i][j]-=mod;
- }
- for (int i=;i<=n;i++)
- {
- ans+=f[+a[i]][+b[i]];if (ans>=mod) ans-=mod;
- ans-=C((a[i]+b[i])<<,a[i]<<);
- if (ans<) ans+=mod;
- }
- ans=ans*inv[]%mod;
- cout<<ans;
- }
[agc001E]BBQ Hard[组合数性质+dp]的更多相关文章
- [Agc001E] BBQ Hard
[Agc001E] BBQ Hard 题目大意 给定\(n\)对正整数\(a_i,b_i\),求\(\sum_{i=1}^{n-1} \sum_{j=i+1}^n \binom{a_i+b_i+a_j ...
- BZOJ_3209_花神的数论题_组合数+数位DP
BZOJ_3209_花神的数论题_组合数+数位DP Description 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 描述 话说花神这天又 ...
- agc001E - BBQ Hard(dp 组合数)
题意 题目链接 Sol 非常妙的一道题目. 首先,我们可以把\(C_{a_i + b_i + a_j + b_j}^{a_i + a_j}\)看做从\((-a_i, -b_i)\)走到\((a_j, ...
- AtCoder AGC001E BBQ Hard (DP、组合计数)
题目链接: https://atcoder.jp/contests/agc001/tasks/agc001_e 题解: 求\(\sum^n_{i=1}\sum^n_{j=i+1} {A_i+A_j+B ...
- [BZOJ4870][Shoi2017]组合数问题 dp+矩阵乘
4870: [Shoi2017]组合数问题 Time Limit: 10 Sec Memory Limit: 512 MB Description Input 第一行有四个整数 n, p, k, r ...
- Codeforces 869C The Intriguing Obsession:组合数 or dp
题目链接:http://codeforces.com/problemset/problem/869/C 题意: 红色.蓝色.紫色的小岛分别有a,b,c个. 你可以在两个不同的岛之间架桥,桥的长度为1. ...
- POJ 3046 Ant Counting ( 多重集组合数 && 经典DP )
题意 : 有 n 种蚂蚁,第 i 种蚂蚁有ai个,一共有 A 个蚂蚁.不同类别的蚂蚁可以相互区分,但同种类别的蚂蚁不能相互区别.从这些蚂蚁中分别取出S,S+1...B个,一共有多少种取法. 分析 : ...
- 洛谷$P$3746 [六省联考2017]组合数问题 $dp$+矩乘+组合数学
正解:$dp$+矩乘+组合数学 解题报告: 传送门! 首先不难发现这个什么鬼无穷就是个纸老虎趴,,,最多在$\binom{n\cdot k+r}{n\cdot k}$的时候就已经是0了后面显然不用做下 ...
- 多重集组合数 简单dp
#include <cstdio> #include <iostream> using namespace std; +; +; +; ; int n,m,M; int a[m ...
随机推荐
- 带参sql$和#的区别(注解)
主要区别就是#带双引号,$不带 例如:#{id}代表'id',${id}代表id 下面是Mybatis @Select注解方式的sql @Select("select id,name fro ...
- 14. Android框架和工具之 ImageLoader(图片加载)
1. 这个图片加载框架网友很多都已经使用过,而且分析也很到位,这里我就不写了,直接引用别人,尊重别人的劳动成果. 2. 参考如下: (1)Android 开源框架Universal-Image-Loa ...
- PHP笔记09:PHP之 MVC理解
1. 首先通俗地说说我对MVC的理解: Model是负责干活的,它干的活主要是从数据库中获取需要的数据以及对获取的数据按照业务逻辑进行加工处理,至于为什么要干某件活,何时干某件活它一概不管,而这正是C ...
- python中基于descriptor的一些概念(下)
@python中基于descriptor的一些概念(下) 3. Descriptor介绍 3.1 Descriptor代码示例 3.2 定义 3.3 Descriptor Protocol(协议) 3 ...
- office2013密钥
GYWDG-NMV9P-746HR-Y2VQW-YPXKK6HDB9-BNRGY-J3F83-CF43C-D67TXG9N3P-GRJK6-VM63J-F9M27-KHGXKX2YWD-NWJ42-3 ...
- 如何批量下载bing的背景图片?
工具准备 wget(点击下载) 批处理命令(点击下载) 网友提供的接口:http://area.sinaapp.com/bingImg?daysAgo=1(1代表天数) 实现步骤 1.打开记事本,并将 ...
- jQuery .attr()和.removeAttr()方法操作元素属性示例
今天主要和大家一起分享一下如何使用jQuery的.attr()和.removeAttr()方法读取,添加,修改,删除元素的属性.大家在平时的Web页面制作中都有碰到如何动态的获取元素的属性和属性值,或 ...
- 近十年one-to-one最短路算法研究整理
前言:针对单源最短路算法,目前最经典的思路即标号算法,以Dijkstra算法和Bellman-Ford算法为根本演进了各种优化技术和算法.针对复杂网络,传统的优化思路是在数据结构和双向搜索上做文章,或 ...
- [Luogu2622]关灯问题$||$(状压$DP$)
#\(\color{red}{\mathcal{Description}}\) \(Link\) 现有\(n\)盏灯,以及\(m\)个按钮.每个按钮可以同时控制这\(n\)盏灯--按下了第i个按钮,对 ...
- web测试--测试点
转载自:51Testing 首先,查找需求说明.网站设计等相关文档,分析测试需求,制定测试计划,确定测试范围和测试策略,一般包括以下几个部分:功能性测试:界面测试:性能测试:数据库测试:安全性测试:兼 ...