POJ 3186 Treats for the Cows

 

传送门:http://poj.org/problem?id=3186

解题思路:

dp[i][j]:编号i到j的物品的最大值

状态方程:

dp[i][j]=max(dp[i+1][j]+a[i]*(n+i-j),dp[i][j-1]+a[j]*(n+i-j));

实现代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;


const int MAXN=2005;
const int INF=1<<30;
long long a[MAXN];
long long dp[MAXN][MAXN];

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        for(int i=1;i<=n;i++)
            scanf("%lld",&a[i]);
        memset(dp,0,sizeof(dp));
        for(int i=n;i>0;i--)
            for(int j=i;j<=n;j++)
                dp[i][j]=max(dp[i+1][j]+a[i]*(n+i-j),dp[i][j-1]+a[j]*(n+i-j));
        printf("%lld\n",dp[1][n]);
    }
}

 

posted on 2017-03-27 21:01  mkfoy  阅读(131)  评论(0编辑  收藏  举报

导航