首先直接按要求列出式子是\( \sum_{i=1}{n}\sum_{j=i+1}{n}C_{a_i+a_j+b_i+b_j}^{a_i+a_j} \)

这样显然过不了,因为ab的数据范围比较小,所以从这里入手,注意到后面的组合数含义是从点(ai,bi)走到点(-aj,-bj)的方案数

把但是j从i+1开始不好做,就容斥一下,把式子变成\( \sum_{i=1}{n}\sum_{j=1}{n}C_{a_i+a_j+b_i+b_j}{a_i+a_j}-\sum_{i=1}{n}C_{a_i+a_i+b_i+b_i}^{a_i+a_j} \)

所以设f[i][j]为从点(i,j)左下方存在的点走到点(i,j)的方案数总和,转移是f[i][j]+=f[i-1][j]+f[i][j-1]也就是从左点和下点走一步过来再加上这个点本来就存在的,就是原来的(ai,bi)要变成(-ai,-bi)

然后dp完对每个点都加到答案里再减掉后面的部分即可

#include<iostream>
#include<cstdio>
using namespace std;
const int N=200005,mod=1e9+7;
int n,a[N],b[N],f[4005][4005],fac[N],inv[N],ans;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int ksm(int a,int b)
{
int r=1;
while(b)
{
if(b&1)
r=1ll*r*a%mod;
a=1ll*a*a%mod;
b>>=1;
}
return r;
}
int C(int n,int m)
{
return 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int main()
{
fac[0]=inv[0]=1;
for(int i=1;i<=10000;i++)
fac[i]=1ll*fac[i-1]*i%mod;
inv[10000]=ksm(fac[10000],mod-2);
for(int i=9999;i>=1;i--)
inv[i]=1ll*inv[i+1]*(i+1)%mod;
n=read();
for(int i=1;i<=n;i++)
{
a[i]=read(),b[i]=read();
f[2001-a[i]][2001-b[i]]++;
ans=(ans-C(a[i]*2+b[i]*2,a[i]*2))%mod;
}
for(int i=1;i<=4002;i++)
for(int j=1;j<=4002;j++)
f[i][j]=(f[i][j]+f[i-1][j]+f[i][j-1])%mod;
for(int i=1;i<=n;i++)
ans=(ans+f[2001+a[i]][2001+b[i]])%mod;
printf("%d\n",(1ll*ans*ksm(2,mod-2)%mod+mod)%mod);
return 0;
}

AGC001 E - BBQ Hard【dp+组合数学】的更多相关文章

  1. AGC001 E - BBQ Hard 组合数学

    题目链接 AGC001 E - BBQ Hard 题解 考虑\(C(n+m,n)\)的组合意义 从\((0,0)\)走到\((n,m)\)的方案数 从\((x,y)\)走到\((x+n,y+m)\)的 ...

  2. CF_229E_Gift_概率DP+组合数学

    CF_229E_Gift_概率DP+组合数学 题目描述: 很久很久以前,一位老人和他的妻子住在蔚蓝的海边.有一天,这位老人前去捕鱼,他捉到了一条活着的金鱼.鱼说:“噢,老渔人!我祈求你放我回到海里,这 ...

  3. [多校联考2019(Round 5 T3)]青青草原的表彰大会(dp+组合数学)

    [多校联考2019(Round 5)]青青草原的表彰大会(dp+组合数学) 题面 青青草原上有n 只羊,他们聚集在包包大人的家里,举办一年一度的表彰大会,在这次的表彰大会中,包包大人让羊们按自己的贡献 ...

  4. [Codeforces722E] Research Rover (dp+组合数学)

    [Codeforces722E] Research Rover (dp+组合数学) 题面 给出一个N*M的方格阵,从(1,1)出发,到(N,M)结束,从(x,y)只能走到(x+1,y)或(x,y+1) ...

  5. AT1983-[AGC001E]BBQ Hard【dp,组合数学】

    正题 题目链接:https://www.luogu.com.cn/problem/AT1983 题目大意 给出\(n\)个数对\((a_i,b_i)\) 求 \[\sum_{i=1}^n\sum_{j ...

  6. CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  7. CF_402F dp+组合数学

    题目链接:http://codeforces.com/problemset/problem/403/D /**算法分析: 这道题综合的考察了dp背包思想和组合数学 */ #include<bit ...

  8. 【BZOJ 3294】 3294: [Cqoi2011]放棋子 (DP+组合数学+容斥原理)

    3294: [Cqoi2011]放棋子 Description Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数 ...

  9. Codeforces - 1081C - Colorful Bricks - 简单dp - 组合数学

    https://codeforces.com/problemset/problem/1081/C 这道题是不会的,我只会考虑 $k=0$ 和 $k=1$ 的情况. $k=0$ 就是全部同色, $k=1 ...

随机推荐

  1. SAP 第四代增强-BTE

    第四代BTE实例详解:http://blog.csdn.net/wbin9752/article/details/7954922 第三代增强(BADI实例详解) :http://blog.csdn.n ...

  2. Java多线程系列 基础篇06 synchronized(同步锁)

    转载 http://www.cnblogs.com/paddix/ 作者:liuxiaopeng http://www.infoq.com/cn/articles/java-se-16-synchro ...

  3. leetcode 859. Buddy Strings

    Given two strings A and B of lowercase letters, return true if and only if we can swap two letters i ...

  4. P3209 [HNOI2010]平面图判定

    P3209 [HNOI2010]平面图判定 哈密尔顿环之外的任意一条边,要么连在环内部,要么连在环外部 判断两条边在同一部分会相交,则这两条边必须分开 那么把边看作点连边,跑二分图染色就行 #incl ...

  5. awk输出匹配内容的所在列数

    想要知道 TCPAbortFailed 所在列数 cat /proc/net/netstat  > test awk '/TCPAbortFailed/ {for (i=1;i<=NF;i ...

  6. HDU 4336 Card Collector:状压 + 期望dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意: 有n种卡片(n <= 20). 对于每一包方便面,里面有卡片i的概率为p[i],可 ...

  7. javascript(6)

    javascript的冒泡排序 var arr=[5,0,-56,900,12]; //大的排序次数(arr.length-1) var flag=false; for(var i=0;i<=a ...

  8. 使用gdb调试c/c++代码

    转自 http://blog.csdn.net/haoel/article/details/2879 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较 ...

  9. P4311 士兵占领[最大流]

    题目地址 有一个$M * N$的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放置了$L_ ...

  10. COGS 2581 无聊的会议V2

    传送 题目大意 给定一个长为\(n\)的序列,定义\(y\)在三元对\((x,y,z)\)中成为中心轴当且仅当同时满足:\(a_x = a_y = a_z,y-x=z-y,x<y<z\)对 ...