「JoyOI1085」派对
题目描述
Matrix67发现身高接近的人似乎更合得来。Matrix67举办的派对共有N(1< =N< =10)个人参加,Matrix67需要把他们安排在圆桌上。Matrix67的安排原则是,圆桌上任意两个相邻人的身高之差不能超过K。请告诉Matrix67他共有多少种安排方法。
输入
第一行输入两个用空格隔开的数N和K,其中1< =N< =10,1< =K< =1 000 000。 第二行到第N+1行每行输入一个人的身高值。所有人的身高都是不超过1 000 000的正整数
输出
输出符合要求的安排总数
样例输入
4 10 2 16 6 10
样例输出
2
代码
回溯水过
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include<iostream> #include<cstdio> using namespace std; int n,m,ans; int a[11];bool used[11]; bool judge(int x,int y) { if(x>=y&&x-y<=m||y>x&&y-x<=m)return 1; return 0; } void search(int last,int k) { if(k==n) { if(judge(last,a[1]))ans++; return; } for(int i=2;i<=n;i++) if(!used[i]&&judge(last,a[i])) { used[i]=1; search(a[i],k+1); used[i]=0; } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&a[i]); search(a[1],1); printf("%d",ans); return 0; } |
Subscribe