zoukankan      html  css  js  c++  java
  • XidianOJ 1095 派对

    题目描述

    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的正整数

    输出

    输出符合要求的安排总数

    --正文
    N非常小,直接一个一个摆过去试试就好
    #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("
    ");
            
            res ++;
            return;
        }
        for (i=1;i<=n;i++){
    //        if (now==1 && table[1] = 16){
    //            printf("HERE!
    ");
    //        }
    //        if (table[1] == 16 && table[2] == 6 && table[3] == 2){
    //            printf("HERE!
    ");
    //        }
            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
    ",res/n);
        }
        return 0;
    }
  • 相关阅读:
    NET打包時加入卸载功能
    c#水晶报表注册码
    sqlserver:某年份某月份 是否在某时间段内的函数
    修改KindEditor编辑器 版本3.5.1
    Flash大文件上传(带进度条)
    让.Net程序脱离.net framework框架运行的方法(转载)
    夏天到了,什么时候园子的T恤可以出来?
    VS2005项目的安装与布署
    解决Select覆盖Div的简单直接的方法
    .Net向Page和UpdatePanel输出JS
  • 原文地址:https://www.cnblogs.com/ToTOrz/p/6143235.html
Copyright © 2011-2022 走看看