题解 | #牛牛吃草#

牛牛吃草

https://www.nowcoder.com/practice/f05254f070944ff792c0dfefabd94fec

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        int[] weights = new int[n+1];
        int[] distances = new int[n+1];
        for(int i=1;i<=n;i++){
            weights[i] = in.nextInt();
        }
        for(int i=1;i<=n;i++){
            distances[i] = in.nextInt();
        }
        int result = maxGrassEating(weights,distances,n);
        System.out.println(result);
    }
    public static int maxGrassEating(int[] weights,int[] distances,int n){
        int maxWeight = 0;
        int[] dp = new int[n+1];
        for(int i=n;i>0;i--){
            dp[i] = weights[i];
            for(int j=i+distances[i];j<=n;j+=distances[i]){
                dp[i] = Math.max(dp[i],weights[i]+dp[j]);
            }
            maxWeight = Math.max(dp[i],maxWeight);
        }
        return maxWeight;
    }
}
  • maxGrassEating 方法接受三个参数:草地上的草量数组 weights,每块草地向右走的距离数组 distances,以及草地的数量 n
  • 通过动态规划的方法,计算从每块草地出发的最大草量,并最终返回一次吃草之旅中的最大草量。
  • 在外层循环中,从最后一块草地开始,逐步计算每块草地的最大草量。
  • 内层循环考虑了从当前草地出发,根据规定的步长能够到达的下一个草地,并选择具有最大草量的那一块。
  • dp 数组用于存储每块草地出发的最大草量。
  • maxWeight 记录整个问题的解,即一次吃草之旅中的最大草量。
全部评论

相关推荐

废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务