Treats for the Cows
题意
一个数组,每次只能取首尾,每次取的数要乘以取的次数,最后累加求最大和
题解
每种情况都考虑一下就好了
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int dp[2010][2010];
int a[200000];
int main() {
int n;
while (cin >> n) {
for (int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
}
int sum = 0;
for (int i = 0; i <= n; i++) {
for (int j = 0; j + i <= n; j++) {
if (i != 0 && j != 0) {
dp[i][j] = max(dp[i - 1][j] + a[i] * (i + j), dp[i][j - 1] + a[n + 1 - j] * (i + j));
} else if (j == 0) {
dp[i][j] = dp[i - 1][j] + a[i] * i;
} else if (i == 0) {
dp[i][j] = dp[i][j - 1] + a[n - j + 1] * j;
}
sum = max(sum, dp[i][j]);
}
}
// for (int i = 0; i <= n; i++) {
// for (int j = 0; j <= n; ++j) {
// cout << dp[i][j] << "\t";
// }
// cout << endl;
// }
printf("%d\n", sum);
}
return 0;
}
样例运行结果