题意:
n个点连成一个圈,求没有公共点的边集的个数
dfs出前10个,发现
n=3 ans=4
n=4 ans=7
之后 ans[i]=ans[i-1]+ans[i-2]
#include#include #include using namespace std;int ans[10001][15010];int main(){ int n; ans[3][0]=1; ans[3][1]=4; ans[4][0]=1; ans[4][1]=7; for(int i=5;i<=10000;i++) { for(int j=1;j<=max(ans[i-1][0],ans[i-2][0]);j++) { ans[i][j]+=ans[i-1][j]+ans[i-2][j]; ans[i][j+1]=ans[i][j]/10; ans[i][j]%=10; } ans[i][0]=max(ans[i-1][0],ans[i-2][0]); if(ans[i][ans[i][0]+1]) ans[i][0]++; } while(scanf("%d",&n)!=EOF) { for(int i=ans[n][0];i;i--) printf("%d",ans[n][i]); printf("\n"); }}
找规律代码:
#includeusing namespace std;int y;bool ok(int x){ if(x==1) return true; if(x&(x<<1)) return false; int a,b; a=x&1; b=0; int sum=0; while(x) { sum++; b=x&1; x>>=1;} if(sum!=y) return true; return a!=b;}int main(){ for(int i=3;i<=10;i++) { y=i; int s=1<