D题求助
#include<bits/stdc++.h> using namespace std; #define int long long const int N = 1005; int dp[N][N]; signed main() { int n; cin >> n; vector<int> a(n + 5); int sum = 0; for (int i = 1; i <= n; i++) cin >> a[i], sum += a[i]; for (int i = 1; i <= n; i++) for (int j = i; j <= n; j++) dp[i][j] = -1e18; dp[1][n] = 0; for (int len = n; len >= 2; len--) { for (int i = 1; i + len - 1 <= n; i++) { int j = i + len - 1; if ((n + len) & 1) dp[i + 1][j] = max(dp[i + 1][j], dp[i][j] + a[i]), dp[i][j - 1] = max(dp[i][j] + a[j], dp[i][j - 1]); else if (a[i] >= a[j]) dp[i + 1][j] = dp[i][j]; else dp[i][j - 1] = dp[i][j]; } } int ans = 0; for (int i = 1; i <= n; i++) { if (!(n & 1)) dp[i][i] += a[i]; ans = max(ans, dp[i][i]); } cout << sum - ans << " " << ans; }
len如果从大到小枚举该怎么写dp 这段代码样例能过 然后只能过百分之二十的数据