题解 | #牛牛吃草#

牛牛吃草

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 记录整个问题的解,即一次吃草之旅中的最大草量。
全部评论

相关推荐

头像
04-17 09:29
已编辑
湖南农业大学 后端
睡姿决定发型丫:本硕末9也是0offer,简历挂了挺多,只有淘天 美团 中兴给了面试机会,淘天二面挂,美团一面kpi面,中兴一面感觉也大概率kpi(虽然国企,但一面0技术纯聊天有点离谱吧)
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务