原题链接:信息学奥赛一本通T1312-昆虫繁殖
没有java题解我就来写一个吧
这题就很像兔子繁殖那题了,简单dp可以解决,题问的成虫不包括幼虫,分下两个数组就好了
思路:
1、建立两个数组,成虫数组old,幼虫数组young
2、前面x-1天,成虫没有产出幼虫,所以成虫还是第一天的1,幼虫为0
3、到第x天,成虫产出一次幼虫,young[i]=old[i-x]*y 。成虫数量为前面一天的成虫数量和2天之前产生的幼虫数量 old[i]=old[i-1]+young[i-2](判段一下如果当前是第一次产生幼虫的前两天是不会产生新的成虫的。
4、输出第z天的old[z]
import java.io.*; public class Main{ static BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); static PrintWriter pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); public static void main(String[] args) throws IOException { //读取数据 String[] temp=bf.readLine().split(" "); int x=Integer.parseInt(temp[0]); int y=Integer.parseInt(temp[1]); int z=Integer.parseInt(temp[2]); //创建数组 long young[] =new long[z+1]; long old[]=new long[z+1]; //循环前x-1天 for(int i=0;i<x;i++) { young[i]=0; old[i]=1; } //循环第x天到第z天 for(int i=x;i<=z;i++) { //思路第三部 young[i]=old[i-x]*y; if(i<2) old[i]=old[i-1]; else old[i]=old[i-1]+young[i-2]; } //输出 pw.print(old[z]); pw.flush(); } }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复