题意:
有n个点,给你邻接矩阵表示第i中第j列这两个点i与j是否可以直接相连,a[i][j]=1表示可以直接相连。前提是你必须使用了n-1条边,如果用不完或者不够都是不能满足题意的,
所以输出0。现在问你对于给定的一组关系,满足题意的连接方案数。
AC code
#include<bits/stdc++.h>
#define mod 1000000007
#define Maxn 507
using namespace std;
int n,a[Maxn][Maxn],d[Maxn][Maxn],f[Maxn][Maxn];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
for (int j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(int i=0;i<n;i++)
d[i][i]=1,f[i][i]=1;
for(int len=2;len<=n;len++)
{
for(int i=0;i<n;i++)
{
int j=(i+len-1)%n;
for(int k=i;k!=j;k=(k+1)%n)
{
if(a[i][j])
d[i][j]=(d[i][j]+1LL*f[i][k]*f[(k+1)%n][j])%mod;
f[i][j]=(f[i][j]+1LL*d[i][(k+1)%n]*f[(k+1)%n][j])%mod;
}
}
}
printf("%d\n",f[0][n-1]);
return 0;
}

探讨在平面内有n个顶点形成的正多边形中,根据特定限制条件,利用n-1条线段连接所有顶点的不同方式的数量,并提供了解决此问题的一种算法实现。
348

被折叠的 条评论
为什么被折叠?



