一、清雨的自助餐
题目描述:
清雨又在吃自助餐了。
排在清雨面前的有N种食物,排成一排,清雨可以选择其中的若干种食物,但是不能连续选择相邻的食物。因为清雨很挑食,当所有食物都不合味口时,他可以一种都不选,即一个都不选也算为一种方法。
请问他有多少种选择食物的方法?
输入:
一个整数n(1 <= n <= 90)
输出:
一个正整数表示答案
样例输入:
3
样例输出:
5
Hint
样例解释:有3种食物,方案为1、2、3、13、不选,共5种。
动态规划解法,已经AC的代码。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long[] memo = new long[n+1];
Arrays.fill(memo, -1);
memo[0] = 1;
memo[1] = 2;
for(int i=2; i<=n; i++) {
if(memo[i] == -1) {
memo[i] = memo[i-1] + memo[i-2];
}
}
System.out.println(memo[n]);
}
}
二、散散的树
题目描述:
散散掌握着一片森林,这片森林有N棵数,高度分别为ai,现在散散想要长度为m的木头,散散的锯子有一个缺陷,必须同时切割所有的树木,即如果有高度为10,15,12的木头,散散只能确定锯子的高度,如果锯子的高度为13,那么只能将高度为15的树木切下长度为2的木头,锯子高度为8,则分别切下2,74的木头,共13长度。请问锯子的高度最高可以多高呢?
n <= 10^5
m <= 10^9
ai <= 10^9
输入:
第一行n和m
第二行n个整数ai
输出:
一个高度
样例输入:
5 20
4 42 40 26 46
样例输出:
36