1 条题解
-
0
C :
#include "stdio.h" int n; int a[100],f[100][101]; int main() { int i,j,k; int max; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(j=2;j<=n;j++) { for(i=0;i<n;i++) { f[i][j]=a[i]*a[(i+1)%n]*a[(i+j)%n]+f[(i+1)%n][j-1]; for(k=2;k<j;k++) { if(f[i][j]<a[i]*a[(i+k)%n]*a[(i+j)%n]+f[i][k]+f[(i+k)%n][j-k]) f[i][j]=a[i]*a[(i+k)%n]*a[(i+j)%n]+f[i][k]+f[(i+k)%n][j-k]; } } } max=f[0][n]; for(i=1;i<=n;i++) { if(max<f[i][n]) max=f[i][n]; } printf("%d\n",max); return 0; }
C++ :
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int maxn=201; int a[maxn],f[maxn][maxn]={0},n; void init(); void work(); int my_max(int,int); int main() { //freopen("energy2.in","r",stdin); init(); work(); return 0; } void init() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; a[i+n]=a[i]; } } void work() { for(int d=2;d<=n;d++) { for(int i=1;i<=2*n-d+1;i++) { int j=i+d-1; for(int k=i;k<j;k++) { f[i][j]=my_max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1]); } //cout<<f[i][j]<<endl; } } int tot=0; for(int i=1;i<=n;i++) tot=my_max(tot,f[i][i+n-1]); cout<<tot<<endl; } int my_max(int x,int y) { if(x>y)return x; else return y; }
Pascal :
program p22973; var f:array[0..500,0..500]of int64; w:int64; n,m,i,j,k,p:longint; a:array[0..500]of record s,t:longint; end; begin readln(n); for i:=1 to n do read(a[i].s); for i:=1 to n do if i=n then a[i].t:=a[1].s else a[i].t:=a[i+1].s; for i:=1 to n do a[i+n]:=a[i]; for i:=2 to n do for j:=1 to 2*n-i+1 do begin m:=-maxlongint; for k:=1 to i-1 do if m<f[k,j]+f[i-k,j+k]+a[j].s*a[j+k-1].t*a[j+i-1].t then m:=f[k,j]+f[i-k,j+k]+a[j].s*a[j+k-1].t*a[j+i-1].t; f[i,j]:=m; end; m:=-maxlongint; for i:=1 to n do if m<f[n,i]then m:=f[n,i]; writeln(m); end.
- 1
信息
- ID
- 833
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者