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
",dp[1][n]);
    }
}
自己选的路,跪着也要把它走完------ACM坑
原文地址:https://www.cnblogs.com/IKnowYou0/p/6628772.html