猴子下山,动态规划。

来源:互联网 发布:微盘交易源码下载 编辑:程序博客网 时间:2024/05/01 01:53

题目:小猴子下山,沿着下山的路有一排桃树,每棵树都结了一些桃子。小猴子想摘桃子,但是又一些条件需要遵守,小瘦子只能沿着下山的方向走,不能回头,每棵树最多摘一个,而且一旦摘了一棵树的桃子,就不能再摘比这棵树结的桃子少的树上的桃子,那么小猴子最多能摘到几课桃子呢?
距离说明,比如有五棵树,分别结了10,4,5,12,8棵桃子,那么小猴子最多能摘3颗桃子,来自于结了4,5,12颗桃子的桃树。

输入范例:
5
10
4
5
12
8
输出范例:
3

    package Test;import java.util.*;public class Main {    /** 请完成下面这个函数,实现题目要求的功能 **/    /** 当然,你也可以不按照这个模板来作答,完全按照自己的想法来 ^-^ **/    static int pick(int[] peaches) {        int[][] num = new int[peaches.length][peaches.length];        int x = 0;        for (int i = 0; i < peaches.length - 1; i++) {            for (int j = i; j < num.length; j++) {                if (j == i) {                    num[i][j] = 1;                    if (x < num[i][j]) {                        x = num[i][j];                    }                } else {                    if (peaches[j] > peaches[i]) {                        int k = j - 1;                        while (k >= i) {                            if (peaches[j] >= peaches[k]) {                                num[i][j] = num[i][k] + 1;                                break;                            } else {                                k--;                            }                        }                        if (num[i][j] > x) {                            x = num[i][j];                        }                    } else {                        continue;                    }                }            }        }        return x;    }    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        int trees = in.nextInt();        int[] peaches = new int[trees];        for (int i = 0; i < peaches.length; i++) {            peaches[i] = in.nextInt();        }        in.close();        System.out.println(pick(peaches));    }}
原创粉丝点击