Matrix67发现身高接近的人似乎更合得来。Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排在圆桌上。Matrix67的安排原则是,圆桌上任意两个相邻人的身高之差不能超过K。请告诉Matrix67他共有多少种安排方法。
标签:空格 i++ 需要 als 方法 ring span names else
Matrix67发现身高接近的人似乎更合得来。Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排在圆桌上。Matrix67的安排原则是,圆桌上任意两个相邻人的身高之差不能超过K。请告诉Matrix67他共有多少种安排方法。
输出符合要求的安排总数
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int height[11]; int visit[11]; int table[11]; int n,k; int res = 0; int my_abs(int a){ if (a<0) return -a; return a; } bool canPos(int i,int height){ if (i == 1) return true; if (i == n){ if ( my_abs(height-table[i-1]) <= k && my_abs(height - table[1]) <= k){ return true; } else return false; } else if (my_abs(height-table[i-1]) <= k){ return true; } else return false; } void pos(int now){ int i; if (now == n+1) { // for (i=1;i<=n;i++){ // printf("%d ",table[i]); // } printf("\n"); res ++; return; } for (i=1;i<=n;i++){ // if (now==1 && table[1] = 16){ // printf("HERE!\n"); // } // if (table[1] == 16 && table[2] == 6 && table[3] == 2){ // printf("HERE!\n"); // } if (!visit[i] && canPos(now,height[i])){ table[now] = height[i]; visit[i] = 1; pos(now+1); table[now] = 0; visit[i] = 0; } } } int main(){ while (scanf("%d %d",&n,&k) != EOF){ int i; res = 0; memset(visit,0,sizeof(visit)); memset(table,0,sizeof(table)); for (i=1;i<=n;i++) scanf("%d",&height[i]); pos(1); printf("%d\n",res/n); } return 0; }
标签:空格 i++ 需要 als 方法 ring span names else
原文地址:http://www.cnblogs.com/ToTOrz/p/6143235.html