Luogu P2858 [USACO06FEB]奶牛零食Treats for the Cows 【区间dp】By cellur925
做完A Game以后找道区间dp练练手...结果这题没写出来(哭)。
和A Game一样的性质,从两边取,但是竟然还有天数,鉴于之前做dp经常在状态中少保存一些东西,所以这次精心设计了状态(不对的)。
开始的naive想法:设f[i][j][0/1]为把第1~i / i~n的零食兜售完所得的最多钱,然后我们就会发现这个状态十分难转移。
水题还看了题解。
十分朴素的区间dp,和我在能量项链总结的如出一辙。
本题突破口:可以直接通过区间来得出当前是第几天!!
Code
1 #include<cstdio> 2 #include<algorithm> 3 4 using namespace std; 5 6 int n; 7 int a[2009]; 8 int f[2009][2009]; 9 10 int main() 11 { 12 scanf("%d",&n); 13 for(int i=1;i<=n;i++) 14 { 15 scanf("%d",&a[i]); 16 f[i][i]=a[i]*n; 17 } 18 for(int len=1;len<=n;len++) 19 for(int l=1;l+len-1<=n;l++) 20 { 21 int r=len+l-1; 22 f[l][r]=max(f[l][r-1]+a[r]*(n-len+1),f[l+1][r]+a[l]*(n-len+1)); 23 } 24 printf("%d",f[1][n]); 25 return 0; 26 }
独立意志与自由思想是必须争的,且须以生死力争。