CodeForces - 855B Marvolo Gaunt's Ring(DP)
Professor Dumbledore is helping Harry destroy the Horcruxes. He went to Gaunt Shack as he suspected a Horcrux to be present there. He saw Marvolo Gaunt's Ring and identified it as a Horcrux. Although he destroyed it, he is still affected by its curse. Professor Snape is helping Dumbledore remove the curse. For this, he wants to give Dumbledore exactly x drops of the potion he made.
Value of x is calculated as maximum of p·ai + q·aj + r·ak for given p, q, r and array a1, a2, ... an such that 1 ≤ i ≤ j ≤ k ≤ n. Help Snape find the value of x. Do note that the value of x may be negative.
Input
First line of input contains 4 integers n, p, q, r ( - 109 ≤ p, q, r ≤ 109, 1 ≤ n ≤ 105).
Next line of input contains n space separated integers a1, a2, ... an ( - 109 ≤ ai ≤ 109).
Output
Output a single integer the maximum value of p·ai + q·aj + r·ak that can be obtained provided 1 ≤ i ≤ j ≤ k ≤ n.
Examples
5 1 2 3
1 2 3 4 5
30
5 1 2 -3
-1 -2 -3 -4 -5
12
Note
In the first sample case, we can take i = j = k = 5, thus making the answer as 1·5 + 2·5 + 3·5 = 30.
In second sample case, selecting i = j = 1 and k = 5 gives the answer 12.
思路:我忽略了题目中的1 ≤ i ≤ j ≤ k ≤ n,导致一直wa,满脸泪水。
#include <cstdio> #include <iostream> #include <string> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #include <vector> #include <map> using namespace std; #define ll long long ll p, q, r, num[100000+8], miao1 = -8e18, miao2 = -8e18, miao3 = -8e18, ans; int n; int main() { scanf("%d%lld%lld%lld", &n, &p, &q, &r); for(int i = 0; i<n; i++) { scanf("%lld", &num[i]); miao1 = max(miao1, p*num[i]); miao2 = max(miao2, miao1+q*num[i]);//保证1 ≤ i ≤ j miao3 = max(miao3, miao2+r*num[i]);//保证1 ≤ i ≤ j ≤ k ≤ n } printf("%lld\n", miao3); return 0; }