当前位置: 代码迷 >> 综合 >> 洛谷 P2858 USACO06FEB 奶牛零食 Treats for the Cows
  详细解决方案

洛谷 P2858 USACO06FEB 奶牛零食 Treats for the Cows

热度:78   发布时间:2023-12-06 08:20:25.0

题目:奶牛零食 Treats for the Cows


思路:

f[i][j]表示从盒子顶端取到了i,还剩下j个零食可获得最多的钱。

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

边界条件 f[i][1]=a[i]*n


代码:

#include<bits/stdc++.h>
using namespace std;#define maxn 2000int n;
int a[maxn+5];
int f[maxn+5][maxn+5]= {0};int main() {scanf("%d",&n);for(int i=1; i<=n; i++) {scanf("%d",&a[i]);f[i][1]=a[i]*n;}for(int j=2; j<=n; j++) {for(int i=n-j+1; i>=1; i--) {f[i][j]=max(f[i+1][j-1]+a[i]*(n-j+1),f[i][j-1]+a[i+j-1]*(n-j+1));}}printf("%d",f[1][n]);return 0;
}