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]); } }
自己选的路,跪着也要把它走完------ACM坑