Poj3186treats for the cows (interval DP)

Source: Internet
Author: User

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 has es over a given period time.

The treats are interesting for each 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.
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.

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

513152

Sample output

43

Hint

Explanation of the sample:

Five treats. On the first day FJ can have either treat #1 (value 1) or treat #5 (value 2 ).

FJ sells the treats (values 1, 3, 1, 5, 2) in the following order of indices: 1, 5, 2, 3, 4, making 1x1 + 2X2 + 3x3 + 4x1 + 5x5 = 43. only the two ends can be retrieved.
#include<stdio.h>int dp[2005][2005];int max(int a,int b){    return a>b?a:b;}int main(){    int n,a[2005],ans[2005];    while(scanf("%d",&n)>0)    {        ans[0]=0;        for(int i=1;i<=n;i++)        {            scanf("%d",&a[i]);            ans[i]=ans[i-1]+a[i];            for(int j=1;j<=n;j++)            dp[i][j]=0;        }        for(int r=0;r<n;r++)        for(int i=1;i<=n-r;i++)        {            int j=i+r;            dp[i][j]=max(dp[i][j-1]+a[j]+ans[j-1]-ans[i-1],a[i]+ans[j]-ans[i]+dp[i+1][j]);        }        printf("%d\n",dp[1][n]);    }}


Poj3186treats for the cows (interval DP)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.