1 条题解
-
0
C :
#include<stdio.h> #include<math.h> #include<string.h> int a[201],f[201][201],sum[201][201]; int n; int main() { int i,j; scanf("%d",&n); for (i=1;i<=n;i++) { scanf("%d",&a[i]); sum[i][i]=a[i]; f[i][i]=a[i]; } for (i=n-1;i>=1;i--) for (j=i+1;j<=n;j++) { sum[i][j]=sum[i][j-1]+a[j]; f[i][j]=sum[i+1][j]+a[i]-f[i+1][j]>sum[i][j-1]+a[j]-f[i][j-1]?sum[i+1][j]+a[i]-f[i+1][j]:sum[i][j-1]+a[j]-f[i][j-1]; } printf("%d %d\n",f[1][n],sum[1][n]-f[1][n]); return 0; }C++ :
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; int n; int a[105], s[105]={0}; int f[105][105]; int main() { scanf("%d", &n); for (int i = 1; i <= n; ++ i) { scanf("%d", &a[i]); s[i] = s[i-1] + a[i]; f[i][i] = a[i]; } for (int k = 1; k != n ; ++ k) for (int i = 1; i + k <= n; ++ i) { int j = i + k; f[i][j] = max(s[j] - s[i] - f[i + 1][j] + a[i], s[j - 1] - s[i - 1] - f[i][j - 1] + a[j]); } printf("%d %d\n", f[1][n], s[n] - f[1][n]); return 0; }Pascal :
var f:array[1..100,1..100]of longint; sum:array[0..100]of longint; i,j,k,n:longint; function min(a,b:longint):longint; begin if a>b then exit(b) else exit (a); end; begin readln(n); fillchar(f,sizeof(f),0); sum[0]:=0; for i:=1 to n do begin read(f[i,i]); sum[i]:=sum[i-1]+f[i,i]; end; for j:=1 to n-1 do for i:=1 to n-j do f[i,i+j]:=sum[i+j]-sum[i-1]-min(f[i,i+j-1],f[i+1,i+j]); writeln(f[1,n],' ',sum[n]-sum[0]-f[1,n]); end.
- 1
信息
- ID
- 4486
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者