原题链接:蓝桥杯算法提高VIP-分分钟的碎碎念
解题思路: 动态规划来解
1. 从念头序列的最后一个念头开始往前遍历分析每一个念头
2. 寻找待分析念头的源念头(from[i]=0) 并记录当前念头数 sum
3. 当遍历下一个念头时 更新最长念头数max
注意事项:
参考代码:
public class brokenThought { public static int solve(int [] from) { int max=0; //最长念头数 int sum; //动态统计当前因果念头的数量 int j; for(int i=from.length-1;i>0;i--) { //从后往前遍历每一个念头 去寻找它的源念头 sum=1; //每分析念头源念头时 当前念头数总为1 j=i; //提取正在遍历的念头 while(from[j]!=0) { j=from[j]; //分析这个念头的源念头 这个念头去访问上一个念头 再访问上一个念头 sum++; } max=max>sum?max:sum; //每分析完一个念头 就与当前最长比较 } return max; } public static void main(String[] args) { Scanner s=new Scanner(System.in); int n=s.nextInt(); int from[]=new int[n+1]; //from数组用于记录念头数量 for(int i=1;i<from.length;i++) { from[i]=s.nextInt(); } System.out.println(solve(from)); } }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复