2 条题解
-
0
#include <bits/stdc++.h>//内存:73 M 时间:36 ms using namespace std; typedef long long ll; int n; ll a[3010], f[3010][3010]; int main() { scanf("%d", &n); ll sum=0;for (int i = 1; i <= n; i++) scanf("%lld", &a[i]), sum += a[i]; memset(f, 0, sizeof(f)); for (int i = 1; i <= n; i++) f[i][i] = a[i]; for (int i = 1; i <= n; i++) a[i] += a[i - 1]; for (int len = 2; len <= n; len++) for (int i = 1; i + len - 1 <= n; i++) { int j=i + len - 1; f[i][j] = a[j]-a[i-1] - min(f[i][j-1],f[i+1][j]); } printf("%lld\n", 2*f[1][n]-sum); return 0; }#include <bits/stdc++.h>//内存:37 M 时间:25 ms using namespace std; typedef long long ll; int n; ll a[3010], f[3010*3010/2]; int getid(int i,int j) { int st=n,ed=n-(i-1)+1; return (ed+st)*(st-ed+1)/2+(j-i+1); } int main() { scanf("%d", &n); ll sum=0;for (int i = 1; i <= n; i++) scanf("%lld", &a[i]), sum += a[i]; memset(f, 0, sizeof(f)); for (int i = 1; i <= n; i++) f[getid(i,i)] = a[i]; for (int i = 1; i <= n; i++) a[i] += a[i - 1]; for (int len = 2; len <= n; len++) for (int i = 1; i + len - 1 <= n; i++) { int j=i + len - 1; f[getid(i,j)] = a[j]-a[i-1] - min(f[getid(i+1,j)], f[getid(i,j-1)]); } printf("%lld\n", 2*f[getid(1,n)]-sum); return 0; } -
0
#include <bits/stdc++.h>//内存:73 M 时间:36 ms using namespace std; typedef long long ll; int n; ll a[3010], f[3010][3010]; int main() { scanf("%d", &n); ll sum=0;for (int i = 1; i <= n; i++) scanf("%lld", &a[i]), sum += a[i]; memset(f, 0, sizeof(f)); for (int i = 1; i <= n; i++) f[i][i] = a[i]; for (int i = 1; i <= n; i++) a[i] += a[i - 1]; for (int len = 2; len <= n; len++) for (int i = 1; i + len - 1 <= n; i++) { int j=i + len - 1; f[i][j] = a[j]-a[i-1] - min(f[i][j-1],f[i+1][j]); } printf("%lld\n", 2*f[1][n]-sum); return 0; } #include <bits/stdc++.h>//内存:37 M 时间:25 ms using namespace std; typedef long long ll; int n; ll a[3010], f[3010*3010/2]; int getid(int i,int j) { int st=n,ed=n-(i-1)+1; return (ed+st)*(st-ed+1)/2+(j-i+1); } int main() { scanf("%d", &n); ll sum=0;for (int i = 1; i <= n; i++) scanf("%lld", &a[i]), sum += a[i]; memset(f, 0, sizeof(f)); for (int i = 1; i <= n; i++) f[getid(i,i)] = a[i]; for (int i = 1; i <= n; i++) a[i] += a[i - 1]; for (int len = 2; len <= n; len++) for (int i = 1; i + len - 1 <= n; i++) { int j=i + len - 1; f[getid(i,j)] = a[j]-a[i-1] - min(f[getid(i+1,j)], f[getid(i,j-1)]); } printf("%lld\n", 2*f[getid(1,n)]-sum); return 0; }
- 1
信息
- ID
- 1681
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 6
- 标签
- 递交数
- 67
- 已通过
- 21
- 上传者