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