Java实现蓝桥杯G将军的示例代码
G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军)。现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加队员的独立性,要求如果一名士兵在队中,他的直接上级不能在队中。
请问,G将军有多少种派出队的方法。注意,G将军也可以作为一个士兵进入队。
输入格式
输入的第一行包含一个整数n,表示包括G将军在内的军队的人数。军队的士兵从1至n编号,G将军编号为1。
接下来n-1个数,分别表示编号为2,3,…,n的士兵的直接上级编号,编号i的士兵的直接上级的编号小于i。
输出格式
输出一个整数,表示派出队的方案数。由于数目可能很大,你只需要输出这个数除10007的余数即可。
样例输入1
3
11
样例输出1
4
样例说明
这四种方式分别是:
选1;
选2;
选3;
选2,3。
样例输入2
7
112233
样例输出2
40
数据规模与约定
对于20%的数据,n≤20;
对于40%的数据,n≤100;
对于100%的数据,1≤n≤100000。
资源约定:
峰值内存消耗(含虚拟机)<256M
CPU消耗<2000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…”的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
importjava.util.ArrayList; importjava.util.Scanner; publicclassMain{ publicstaticintn; publicstaticintMOD=10007; publicstaticArrayList[]list; publicstaticlong[][]dp; publicvoiddfs(introot){ dp[root][0]=1; dp[root][1]=1; for(inti=0;i (); for(inti=2;i<=n;i++){ intfather=in.nextInt(); list[father].add(i); } dp=newlong[n+1][2]; test.dfs(1); longresult=(dp[1][0]+dp[1][1]-1)%MOD; System.out.println(result); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。