写不来dp的日常
....就这样吧
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 int dp[2010][2010],v[2010];//取了i个有j个在左 7 int n; 8 int main() 9 { 10 int i,j,r; 11 scanf("%d",&n); 12 for(i=1;i<=n;i++)scanf("%d",&v[i]); 13 for(i=1;i<=n;i++)//天数&取了的个数 14 { 15 for(j=0;j<=i;j++)//左边取了j个 16 { 17 r=i-j;//右边取了i-j个 18 dp[i][j]=max(dp[i-1][j-1]+v[j]*i,dp[i-1][j]+v[n-r+1]*i);//(左边取了j-1个了,那么现在就要取左边第j个,共取i-1个,左边取了j个 ,则右边已取i-j-1个,就要取右边第n-(i-j-1)个) 19 } 20 } 21 int ans=0; 22 for(j=1;j<=n;j++)ans=max(ans,dp[n][j]); 23 printf("%d",ans); 24 return 0; 25 }