派遣敢死队
来源:互联网 发布:北师大网络教育登录 编辑:程序博客网 时间:2024/04/28 22:38
问题描述: G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军)。现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加敢死队队员的独立性,要求如果一名士兵在敢死队中,他的直接上级不能在敢死队中。请问,G将军有多少种派出敢死队的方法。注意,G将军也可以作为一个士兵进入敢死队。
输入的第一行包含一个整数n,表示包括G将军在内的军队的人数。军队的士兵从1至n编号,G将军编号为1。接下来n-1个数,分别表示编号为2, 3, ..., n的士兵的直接上级编号,编号i的士兵的直接上级的编号小于i。
思路:建立一个数组a代表士兵编号为a数组下标的士兵的直接上级;建立一个数组b表示士兵编号为b数组下标的士兵参加还是不参加敢死队,b数组只有两个数,0代表不参加,1代表参加。n个士兵一共有2^n种派遣方法,但是题目中给出条件为:如果一名士兵在敢死队中,他的直接上级不能在敢死队中。
#include<stdio.h>#include<math.h>int main(){int n;int i;int num,temp;int a[100]; //a数组表示士兵的直接上级 int b[100]; //b数组只有0和1表示编号为下标的士兵去还是不去,0代表不去,1代表去 int count=0;int flag;///printf("输入包括G将军在内的军队的人数:\n");scanf("%d",&n);a[1]=0; //表示G将军没有直接上级 b[0]=1; for(i=2;i<=n;i++)scanf("%d",&a[i]);for(num=0;num<pow(2,n);num++){temp=num;for(i=1;i<=n;i++) //对b数组进行赋值,0代表不去,1代表去 {b[i]=temp%2;temp/=2;}flag=1;for(i=n;i>=1;i--){if(b[i]&&b[a[i]]) //如果该士兵去了 ,他的直接上级也去了,不符合条件,flag=0{flag=0;break; } }if(flag)count++;}printf("%d\n",count);return 0;}
阅读全文
0 0
- 派遣敢死队
- 派遣敢死队
- 派遣敢死队
- 派遣敢死队
- 蓝桥杯校内选拔赛 派遣敢死队
- 第六届蓝桥杯校园选拔赛试题---派遣敢死队 解题报告
- 蓝桥杯——派遣敢死队问题—C语言
- 《敢死队》
- 敢死队
- 敢死队
- 螃蟹敢死队
- 敢死队问题
- 《敢死队》观后感
- 敢死队中文翻译
- 敢死队问题
- 不敢死队
- 不敢死队
- 派遣函数
- 4865fa85d9ee28bfab97d073a3dde8a3 病毒分析
- Mac 上安装配置jdk
- 算法介绍:Dijkstra算法
- vue2 in typescript2 (3)
- 【2017 ACM/ICPC Asia Regional Qingdao Online 1008】hdu 6213 Chinese Zodiac
- 派遣敢死队
- 排列组合以及等比数列,算法最长公共子序列
- BigDecimal 一些用法
- 基于python3.4.3的Requests2.18.4爬虫学习系列之一 安装及初识
- windows之记事本注意事项1
- 简单的版本更新
- hadoop搭建与编译运行wordcount例
- 2017 ACM/ICPC Asia Regional Qingdao Online
- spring基础配置详解和对象管理基础