NC227595. 跳跳跳
描述
输入描述
第一行一个数n(1≤n≤2000)
接下来一行n个数,表示a[i](1≤a[i]≤2000)
输出描述
一个数,表示dd可能获得的最高分
示例1
输入:
3 1 1 1
输出:
6
说明:
可能方案示例2
输入:
3 1 2 3
输出:
14
说明:
C++ 解法, 执行用时: 34ms, 内存消耗: 23704K, 提交时间: 2021-11-05 20:16:17
#include<bits/stdc++.h> using namespace std; int n,a[4005],dp[2002][4002],ans; int main() { cin>>n; for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i+n]=a[i]; for(int i=1;i<=n;i++) for(int j=1;i+j<=2*n;j++) { dp[i][j]=max(dp[i][j],max(dp[i-1][j]+i*a[i+j-1],dp[i-1][j+1]+i*a[j])); } for(int i=1;i<=n;i++) ans=max(ans,dp[n][i]); cout<<ans; return 0; }