技术标签: 组合数学
组合数学好题!
首先考虑题目要求,在一个数后面填的数可以是,把数列看做网格图,把看做右上走一步,右下,往右,问题变成了从不穿过的方案数,根据套路,可以用总穿过的,穿过的就可以用关于对称一下,就是的方案数
首先枚举往右走的步数,再枚举最后走到的那个,就可以这样算:
观察式子,因为每次相当于给,所以除二就能消掉,就变成了杨辉三角中一行的一半,然后前面后面相差一,所以中间都抵消了,最后就变成:
放上我并列第一快 的代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define maxn 1000005
#define LL long long
using namespace std;
int n,fac[maxn],inv[maxn];
const int mod=1e9+7;
LL ans;
inline int qpow(int x,int k){
int ret=1;
while(k){
if(k&1) ret=1LL*ret*x%mod;
x=1LL*x*x%mod; k>>=1;
} return ret;
}
inline int C(int n,int m){ return 1LL*fac[n]*inv[m]%mod*inv[n-m]%mod;}
int main(){
scanf("%d",&n); fac[0]=1;
for(int i=1;i<=n;i++) fac[i]=1LL*fac[i-1]*i%mod;
inv[n]=qpow(fac[n],mod-2);
for(int i=n;i;i--) inv[i-1]=1LL*inv[i]*i%mod;
for(int i=0;i<=n;i++){
if((n-i-1)&1) (ans+=1LL*C(n-1,i)*C(n-i-1,(n-i)>>1)%mod)%=mod;
else (ans+=1LL*C(n-1,i)*C(n-i-1,(n-i-1)>>1)%mod)%=mod;
}
printf("%lld\n",ans);
return 0;
}
Problem 有一个\(1*n\)的矩阵,固定第一个数为\(1\),其他填正整数, 且相邻数的差不能超过\(1\),求方案数。 \(n\le 10^6\) Solution 容易发现答案是\(f_n=f_{n-1}*3-g_{n}\)。 其中\(g_i\)表示从\((0,0)\)走到\((i,0)\)可以向上,向下向右走一格,但是只能在第一象限的方案数。 然后这个显然可以用 组合数 + 卡特兰数...
题目链接 题意: 有一个1*n的矩阵,固定第一个数为1,其他填正整数 ,且相邻数的差不能超过1,求方案数%1e9+71e9+7的结果。 思路: 显然: 如果第ii个格子的数是1,则第i+1i+1个格子只有11或者22两种可能 而如果第ii个格子的数不为1,则第i+1i+1个格子一定有三种可能。 则当考虑1∗n1∗n矩阵填法的方案数时,如果我们已经知道了1∗...
代码1: 代码2: ...
主要是构图花了不少时间,应该一小时能够搞定的,却花了三个小时,最大的原因是初始化没有做好 说下题目,我们给每个点一个编号,然后求出每两个点之间的最短路径,肯定是直线最短。 然后为了简化,我们可以只求这个点和他后面的点的关系(因为必然可以向前走,不可能折回来再往前走才是最短的), 注意一点,不是每两个点之间都能直达的,得判断其中经过的路径有没有被墙堵住了(判断直线和线段的关系 ) 判断如下 图构好之...
The Doors 题意 : 给出一个房间,大小为10×10,起点在(0,5),终点在(10,5),房间中有若干堵墙,问从起点到终点的最短路径。 题解 : 枚举每两点,如果这两个点构成的线段没有与房间中的任何一线段相交,那么就建一条边,所有边建完之后跑一边迪杰斯特拉就好了。...
传送门 隔板法裸题 枚举走了几步,然后隔板法,不允许空...
题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出一个数组A,经过一次处理,生成一个数组S,数组S中的每个值相当于数组A的累加,比如:A = {1 3 5 6} => S = {1 4 9 15}。如果对生成的数组S再进行一次累加操作,{1 4 9 15} => {1 5 14 29},现在给出数组A,问进行K次操...
传送门 解题思路 因为每次横纵坐标至少\(+1\),所以可以枚举走的步数,枚举走的步数\(i\)后剩下的就是把\(n-1\)与\(m-1\)划分成\(i\)个有序正整数相加,所以用隔板法,\(ans=\sum\limits_{i=1}^{min(n,m)-1} C(n-2,i-1)*C(m-2,i-1)\) 代码...
Maven配置本地仓库 Maven项目使用本地仓库 项目部署或开发环境没有外网的情况下, 需要配置本地仓库. 由于是在内网环境,maven无法连接互联网,所以只能事先将jar下载到本地,然后通过配置pom文件,将jar引用至本地仓库即可。 修改maven的settings.xml文件 配置本地仓库目录 修改maven项目中的pom.xml 添加如下配置 配置环境变量 参考链接: https://b...