一个长度为n的非负整型双向队列的“加权和”定义如下:
(1)以此从队列头或尾取一个数,共取n次;
(2)第i次取出的数乘以系数i(i=1...n)得到加权数;
(3)将n个加权数求和,即为该队列的“加权和”。
编写函数
计算给定一个长度为n的非负整型双向队列的“加权和”的最大值(双向队列可以用一维数组或链表表示)
代码:
//18.3加权和
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int jqh(int a[],int n)
{
int i=0;
int j=n-1;
int sum=0;
int k=1;
while(i<=j)//使用贪心算法,每次寻找当前栈顶最小元素乘权重
{
if(a[i]<a[j])
{
sum+=a[i]*k;
k++;
i++;
}
else
{
sum+=a[j]*k;
k++;
j--;
}
}
return sum;
}
int main()
{
int a[8]={7,4,5,3,2,8,9,1};
printf("%d\n",jqh(a,8));
return 0;
}
感谢ljt同学指出错误,18985!