题意:n个节点组成一个圈,求匹配(没有公共点的边集)的个数。
思路:找规律。列举一下n=3,4,5的结果,观察出是一个斐波那契数列。因为结果很大,自己写一个高精度。
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <memory.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define ll long long
#define INF 1000000
#include<time.h>
using namespace std;
int F[10001][2500];
int main(){
memset(F,0,sizeof(F));
F[3][1]=4;F[3][0]=1;
F[4][1]=7;F[4][0]=1;
for(int i=5;i<=10000;i++){
int carry=0;
for(int j=1;j<=F[i-1][0];j++){
F[i][j]=F[i-1][j]+F[i-2][j]+carry;
carry=F[i][j]/10;
F[i][j]%=10;
}
F[i][0]=F[i-1][0];
if(carry){
F[i][F[i-1][0]+1]++;
F[i][0]++;
}
}
int n;
while(cin>>n){
for(int i=F[n][0];i>=1;i--){
printf("%d",F[n][i]);
}
printf("\n");
}
return 0;
}
本文探讨了由n个节点组成的圈状图中匹配(无公共顶点的边集)的数量问题,并通过找规律的方法发现其数量符合斐波那契数列的特点。为了处理可能非常大的结果,文中实现了一个高精度计算方法。
415

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



