北向眼


私信TA

用户名:uq_91541132464

访问量:2186

签 名:

题解都是为了做笔记,备战中

等  级
排  名 1889
经  验 2485
参赛次数 1
文章发表 15
年  龄 20
在职情况 学生
学  校 江西财经大学
专  业 软件工程

  自我简介:

题解都是为了做笔记,备战中 //更新,javaB国一已拿,转战Acwing

没有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分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区