派遣敢死队

来源:互联网 发布:知乎日报与读读日报 编辑:程序博客网 时间:2024/04/29 01:58

G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军)。现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加敢死队队员的独立性,要求如果一名士兵在敢死队中,他的直接上级不能在敢死队中。

请问,G将军有多少种派出敢死队的方法。注意,G将军也可以作为一个士兵进入敢死队。

输入格式

输入的第一行包含一个整数n,表示包括G将军在内的军队的人数。军队的士兵从1至n编号,G将军编号为1。

接下来n-1个数,分别表示编号为2, 3, ..., n的士兵的直接上级编号,编号i的士兵的直接上级的编号小于i。

输出格式

输出一个整数,表示派出敢死队的方案数。由于数目可能很大,你只需要输出这个数除10007的余数即可。


参考代码:


暴力求解:

#include<stdio.h>#include<stdlib.h>#include<math.h>int main(){int n,*a;int i,count=0,j;int *b,temp,flag;scanf("%d",&n);a=(int*)malloc(sizeof(int)*n);b=(int*)malloc(sizeof(int)*n);a[0]=0;for(i=1;i<n;i++)scanf("%d",&a[i]);for(i=0;i<pow(2,n);i++){temp=i;for(j=0;j<n;j++){b[j]=temp%2;temp/=2;}flag=1;for(j=0;j<n;j++){if(b[j]&&b[a[j]-1]){flag=0;break;}}if(flag){count++;count%=10007;}}printf("%d\n",count);return 0;}
回溯法:

#include<stdio.h>#include<stdlib.h>#include<math.h>int n,*a,*b;int count=0;void backtrack(int t){int i,flag=1;if(t==n){count++;count%=10007;}else{for(i=0;i<2;i++){b[t]=i;if(!(b[t]&&b[a[t]-1])||t==0)backtrack(t+1);}}}int main(){int i,j;int temp,flag;scanf("%d",&n);a=(int*)malloc(sizeof(int)*n);b=(int*)malloc(sizeof(int)*n);a[0]=0;for(i=1;i<n;i++)scanf("%d",&a[i]);backtrack(0);printf("%d\n",--count);return 0;}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为7pius太卡怎么办 华为畅享7plus卡怎么办 华为p9屏幕进水变颜色怎么办? 玩王者荣耀卡退怎么办 华为手机忘记开机密码怎么办 华为p9密码忘了怎么办 华为p9解锁密码忘了怎么办 华为手机不支持联通4g怎么办 酷派手机自动下载软件怎么办 小米5a不能开机怎么办 华为手机的视频找不到了怎么办 华为p8内存文件打不开怎么办 华为荣耀9网速慢怎么办 荣耀9手机网速慢怎么办 联想台式机不支持xp驱动怎么办 一体机尾插坏了怎么办 华为手机触屏失灵怎么办 华为p8max手机老是卡怎么办 手机屏碎了数据怎么办 华为p9屏碎了怎么办 华为p7一l09卡顿怎么办 华为p7打不开机怎么办 华为8主板坏了怎么办 华为手机主板坏了怎么办 华为p9文字变英文了怎么办 华为p9plus电池不耐用怎么办 华为mate8手机音量小怎么办 同花顺自选股更新不显示怎么办 华为麦芒定频了怎么办 用线刷宝刷机失败开不了机怎么办 红米手机拨号后黑屏怎么办 sim卡丢了激活码怎么办 电信sim卡未激活怎么办 小米5c老是黑屏怎么办 小米4x黑屏了怎么办 金立s10经常卡屏怎么办 x9来电屏幕不亮怎么办 小米手机拔号黑屏怎么办 小米手机进水黑屏了怎么办 小米6手机黑屏打不开怎么办 小米手机王者荣耀黑屏怎么办