问题描述:王大锤发工资,员工坐一排。每个员工只能知道相邻员工工资。为使员工没有异议,现按工龄发奖金。每个员工至少发100,工龄小的比工龄大的奖金拿的少没有异议。输出最少需要发多少奖金。
解题思路:弄两个数组,初始值都为100,
从左往右过一遍,工龄比前一个大的加100,小的不管。
从右往左过一遍,同上。
然后取出两个数组中大的相加即可。
示例输入:
5
1 2 3 4 5
示例输出:
1500
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = scanner.nextInt();
}
int[] arr1 = new int[N];
int[] arr2 = new int[N];
for (int i = 0; i < N; i++) {
arr1[i] = 100;
arr2[i] = 100;
}
int base = 100;
for (int i = 1; i < N; i++) {
if (arr[i] > arr[i - 1]) {
arr1[i] += base;
base += 100;
}
}
base = 100;
for (int i = N - 1; i > 0; i--) {
if (arr[i - 1] > arr[i]) {
arr2[i - 1] += base;
base += 100;
}
}
int sum = 0;
for (int i = 0; i < N; i++) {
sum += arr1[i] > arr2[i] ? arr1[i] : arr2[i];
}
System.out.println(sum);
}
}
运行结果: