1652: [Usaco2006 Feb]Treats for the Cows
Description
FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money for giving vast amounts of milk. FJ sells one treat per day and wants to maximize the money he receives over a given period time. The treats are interesting for many reasons: * The treats are numbered 1..N and stored sequentially in single file in a long box that is open at both ends. On any day, FJ can retrieve one treat from either end of his stash of treats. * Like fine wines and delicious cheeses, the treats improve with age and command greater prices. * The treats are not uniform: some are better and have higher intrinsic value. Treat i has value v(i) (1 <= v(i) <= 1000). * Cows pay more for treats that have aged longer: a cow will pay v(i)*a for a treat of age a. Given the values v(i) of each of the treats lined up in order of the index i in their box, what is the greatest value FJ can receive for them if he orders their sale optimally? The first treat is sold on day 1 and has age a=1. Each subsequent day increases the age by 1.
约翰经常给产奶量高的奶牛发特殊津贴,于是很快奶牛们拥有了大笔不知该怎么花的钱.为此,约翰购置了N(1≤N≤2000)份美味的零食来卖给奶牛们.每天约翰售出一份零食.当然约翰希望这些零食全部售出后能得到最大的收益.这些零食有以下这些有趣的特性:
Input
* Line 1: A single integer,
N * Lines 2..N+1: Line i+1 contains the value of treat v(i)
Output
* Line 1: The maximum revenue FJ can achieve by selling the treats
Sample Input
1
3
1
5
2
Five treats. On the first day FJ can sell either treat #1 (value 1) or
treat #5 (value 2).
Sample Output
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #include<queue> 7 #include<map> 8 #include<set> 9 #define maxn 2010 10 #define maxm 200010 11 #define inf 10000000000 12 using namespace std; 13 int a[maxn],f[maxn][maxn]; 14 int main(){ 15 int n; 16 scanf("%d",&n); 17 for(int i=1;i<=n;i++){ 18 scanf("%d",&a[i]); 19 f[i][i]=a[i]*n; 20 } 21 for(int i=1;i<=n;i++) 22 for(int j=1;j+i<=n;j++){ 23 int k=j+i; 24 f[j][k]=max(f[j+1][k]+(n-i)*a[j],f[j][k-1]+(n-i)*a[k]); 25 } 26 printf("%d",f[1][n]); 27 return 0; 28 }