样例1输入
6
0 0 5 5 10 10
样例1输出
30
15
样例2输入
7
10 20 30 40 50 60 75
样例2输出
285
285
思路: 创建两个数组amin和amax分别存储sum最小和最大时A数组的取值,因为A1=B1,所以amin[1]=amax[1]=B[1], 接下来从1到n-1循环,每次看Bi的值是否大于Bi-1,如果大于则说明在 i 处数组A产生了一个新的最大值,这时amin和amax都要置为最大值;如果小于等于说明在 i 处数组A没有产生新的最大值,这时 Ai 可以选择0到 B[i](目前A数组的最大值)的所有数,最小为0,最大为B[i],所以将amin置0,amax置为B[i]。
AC程序:
#include<stdio.h>
int main() {
int n, b[110],i,amin[101],amax[101];
//输入
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &b[i]);
}
//a1=b1
amin[0] = b[0];
amax[0] = b[0];
for (i = 1; i < n; i++) {
if (b[i] > b[i - 1]) { //出现新的最大值
amin[i] = b[i];
amax[i] = b[i];
}
else {//没有出现新的最大值
amin[i] = 0;
amax[i] = b[i];
}
}
//计算累计和
int sum1 = 0,sum2=0;
for (i = 0; i < n; i++) {
sum1 += amin[i];
sum2 += amax[i];
}
printf("%d\n%d", sum2, sum1);
return 0;
}