P2858 [USACO06FEB]Treats for the Cows G/S
考察:区间dp
思路:
和矩阵取数游戏P1005(本题的加强版)不能说很像,简直就是一模一样.f[l][r]区间表示卖掉[l,r]区间的最大收益,但是我们只能买两边的值,因此分为两类,卖l和卖r
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 using namespace std; 6 const int N = 2010; 7 int a[N],f[N][N]; 8 int main() 9 { 10 int n; 11 scanf("%d",&n); 12 for(int i=1;i<=n;i++) scanf("%d",&a[i]); 13 for(int len=1;len<=n;len++) 14 for(int l=1;l+len-1<=n;l++) 15 { 16 int r = l+len-1; 17 f[l][r] = max(f[l][r],f[l+1][r]+a[l]*(n-r+l)); 18 f[l][r] = max(f[l][r],f[l][r-1]+a[r]*(n-r+l)); 19 } 20 printf("%d\n",f[1][n]); 21 return 0; 22 }
2021.3.15 二刷完全没看出来是区间dp,以线性DP的思维想了半天