在写这篇文章之前,xxx已经写过了几篇关于改检查class主题的文章,想要了解的朋友可以去翻一下之前的文章

    每日一道理
灯,带有一种明亮的光,每当深夜来临,是它陪伴着你,如此默默无闻。它是平凡的,外表华丽与否,那都是一样的,珍珠点缀,水晶加饰的灯它只能用以装饰,来满足人们的虚荣心,比起这,普普通通的日光灯是幸运的,因为它照明的本性没有改变,如同生活中的一部份人平平凡凡却实实在在。
/*  排坐位
要安排:3个A国人,3个B国人,3个C国人坐成一排。
要求不能使连续的3个人是同一个国籍。
求所有不同方案的总数?
*/
/*public class 排坐位 {
public static char[] c = {'A','A','A','B','B','B','C','C','C'};
public static int kinds= 0; // 不同方案总个数
// 检查是不是有同一国人连续3个
public static boolean check(char[] c){
int count = 1; // 初始个数
for(int i=0;i<c.length-1;i++){
if(c[i]==c[i+1]){
count++;
}else{
count = 1; // 初始个数
}
if(count>=3) return true;
}
return false;
}
// 全排列
public static void f(char[] c,int start,int end){
if(start == end){
if(!check(c)){ // 检查是不是有同一国人连续3个
kinds++; // 不同方案总个数加1
}
return ;
}else{
for(int i=start;i<=end;i++){
char temp = c[i];
c[i] = c[start];
c[start] = temp;
f(c,start+1,end); // 递归
temp = c[i];
c[i] = c[start];
c[start] = temp;
}
}
}
public static void main(String[] args){
f(c,0,c.length-1); // 全排列
System.out.println("kinds:"+kinds);
}
}
*/
方法二
public class 排坐位
{
public static int kinds=0;
public static int b[]=new int[9];
public static boolean vis[]=new boolean[9];
public static int a[]=new int[]{1,1,1,2,2,2,3,3,3};
static void dfs(int start,int end)
{
if(start==end)
{
kinds++;
}
else
{
for(int i=0;i<a.length;i++)
{
if(!vis[i])//未上坐
{
b[start]=a[i];
if(start>1 && b[start-2]==b[start-1] && b[start-1]==b[start])
continue;//边排边检查进步效率
vis[i]=true;
dfs(start+1,end);
vis[i]=false;
}
}
}
}
public static void main(String[] args)
{
dfs(0,a.length);
System.out.println("kinds:"+kinds);
}
}
运行结果:
kinds:283824
扩展:
如果每个国度的三个人是可重复的,即来自同一个国度的三个人是不辨别的,所以序列是可以重复的。
程序如下:
import java.util.Arrays;
public class 排坐位
{
static int kinds=0;
static int a[]=new int[4];
static int b[]=new int[4];
static int c[]=new int[4];
static int aim[]=new int[10];
public static void main(String[] args)
{
Arrays.fill(a,1);
Arrays.fill(b,2);
Arrays.fill(c,3);
dfs(1,3,3,3);
System.out.println("kinds:"+kinds);
}
static void dfs(int start,int a,int b,int c)
{
if(start==10)
{
kinds++;
for(int i=1;i<start;i++)
{
System.out.printf("%c",(aim[i]+64));
}
System.out.println();
}
else if(start<3)//肯定不会涌现三个座来自国度相同的,因为就两坐位。
{
aim[start]=1;
a--;
dfs(start+1,a,b,c);
a++; aim[start]=2;
b--;
dfs(start+1,a,b,c);
b++; aim[start]=3;
c--;
dfs(start+1,a,b,c);
c++;
}
else
{
aim[start]=1;
if(!(aim[start-2]==aim[start-1] && aim[start-1]==aim[start]) && a>0)//不是3连号,且A国度还有人未上坐
{
a--;
dfs(start+1,a,b,c);
a++;
} aim[start]=2;
if(!(aim[start-2]==aim[start-1] && aim[start-1]==aim[start]) && b>0)//同理
{
b--;
dfs(start+1,a,b,c);
b++;
} aim[start]=3;
if(!(aim[start-2]==aim[start-1] && aim[start-1]==aim[start]) && c>0)//同理
{
c--;
dfs(start+1,a,b,c);
c++;
}
}
}
}
运行结果为(部份结果):
CCBBAABCA
CCBBAACAB
CCBBAACBA
CCBBABAAC
CCBBABACA
CCBBABCAA
CCBBACAAB
CCBBACABA
CCBBACBAA
CCBBCAABA
CCBBCABAA
CCBCAABAB
CCBCAABBA
CCBCABAAB
CCBCABABA
CCBCABBAA
CCBCBAABA
CCBCBABAA
kinds:1314

文章结束给大家分享下程序员的一些笑话语录: 乔布斯:怎么样还是咱安全吧!黑客:你的浏览器支持国内网银吗?苹果可以玩国内的网游吗乔布斯:......不可以黑客:那我研究你的漏洞干嘛,我也需要买奶粉!

---------------------------------
原创文章 By
检查和class
---------------------------------

检查class排座位的更多相关文章

  1. 团体程序设计天梯赛-练习集L2-010. 排座位

    L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...

  2. L2-010. 排座位

    L2-010. 排座位 题目链接:https://www.patest.cn/contests/gplt/L2-010 并查集 相关题目:L2-007. 家庭房产,L3-003. 社交集群 下午打的时 ...

  3. L2-010. 排座位(并查集)*

    L2-010. 排座位 参考博客 #include<iostream> #include<math.h> using namespace std; ]; ][]; int fi ...

  4. [IOI2018] seats 排座位

    [IOI2018] seats 排座位 IOI2018题解 压缩状态思想很不错的 每次把原来的贡献减掉,新来的再加上 最多涉及10个点 注意: 1.去重 2.下标从0开始 3.线段树初始的最小值个数都 ...

  5. pta l2-10(排座位)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805066135879680 题意:给宴席排座位,有n个人,m个 ...

  6. CCCC 排座位 图着色问题

    1排座位:https://www.patest.cn/contests/gplt/L2-010 2图着色问题 https://www.patest.cn/contests/gplt/L2-023 建图 ...

  7. 排座位&&Little Elephant And Permutation——排列dp的处理

    排列的问题,就是要把序列排个序,使之达到某种最优值或者统计方案数 dp可以解决部分排列问题. 通常的解决方案是,按照编号(优先级)排序决策,从左到右决策两种. 这里主要是第一个. 排座位• 有

  8. pat 团体天梯赛 L2-010. 排座位

    L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...

  9. CCCC L2-010. 排座位【并查集/分类讨论】

    L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...

随机推荐

  1. git源码中的Makefile

    https://github.com/chucklu/GitStudy   这链接里面的第一次提交 [chucklu@localhost GitStudy]$ cat Makefile CFLAGS= ...

  2. Regular Ball Super Ball

    Description: Regular Ball Super Ball Create a class Ball. Ball objects should accept one argument fo ...

  3. poj2月下旬题解

    poj2388 水题 poj1273 最大流初步 poj2456 简单的二分答案 poj2309 论lowbit的重要性 poj1734 floyd求最小环 poj1001 细节题 poj2184 0 ...

  4. 8.11-8.16:usaco

    summary:57 bzoj1741:裸二分图最大匹配 #include<cstdio> #include<cstring> #include<iostream> ...

  5. css padding在ie7、ie6、firefox中的兼容问题

    padding 简写属性在一个声明中设置所有内边距属性. 说明这个简写属性设置元素所有内边距的宽度,或者设置各边上内边距的宽度.行内非替换元素上设置的内边距不会影响行高计算:因此,如果一个元素既有内边 ...

  6. Linux中的文件特殊权限

    linux中除了常见的读(r).写(w).执行(x)权限以外,还有3个特殊的权限,分别是setuid.setgid和stick bit 1.setuid.setgid 先看个实例,查看你的/usr/b ...

  7. android LayoutInflater和inflate()方法的用法(转载)

    原文出处:http://www.cnblogs.com/top5/archive/2012/05/04/2482328.html 在实际开发中LayoutInflater这个类还是非常有用的,它的作用 ...

  8. UVA 1637 Double Patience

    题意:36张扑克,平分成9摞,两张数字一样的可以拿走,每次随机拿两张,问能拿光的概率. 解法:记忆化搜索,状态压缩.一开始我想在还没拿的时候概率是1,然后往全拿光推···样例过不去···后来觉得推反了 ...

  9. bzoj 3932 [CQOI2015]任务查询系统(主席树)

    Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. 超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...

  10. uva 11916 Emoogle Grid

    题意:用K种颜色给一个N*M的格子涂色.其中有B个格子是不能涂色的.涂色时满足同一列上下紧邻的两个格子的颜色不同.所有的涂色方案模100000007后为R.现在给出M.K.B.R,求一个最小的N,满足 ...