1 条题解
-
0
C :
#include "stdio.h" int n,a[100],s[101]; int max[100][100],min[100][100]; int main() { int i,j,k; scanf("%d",&n); s[0]=0; for(i=0;i<n;i++) { scanf("%d",&a[i]); s[i+1]=s[i]+a[i]; } for(i=1;i<n;i++) { for(j=i-1;j>=0;j--) { max[j][i]=max[j][j]+max[j+1][i]+s[i+1]-s[j]; min[j][i]=min[j][j]+min[j+1][i]+s[i+1]-s[j]; for(k=j+1;k<i;k++) { if(max[j][k]+max[k+1][i]+s[i+1]-s[j]>max[j][i]) max[j][i]=max[j][k]+max[k+1][i]+s[i+1]-s[j]; if(min[j][k]+min[k+1][i]+s[i+1]-s[j]<min[j][i]) min[j][i]=min[j][k]+min[k+1][i]+s[i+1]-s[j]; } } } printf("%d\n%d\n",min[0][n-1],max[0][n-1]); return 0; }
C++ :
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int n,a[301],sum[301][301]={0},f_min[301][301]={0},f_max[301][301]={0}; void init(); void work(); int my_min(int,int); int my_max(int,int); int main() { //freopen("stone5.in","r",stdin); //freopen("stone5.out","w",stdout); init(); work(); return 0; } void init() { cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<n;i++) { int tot=a[i]; for(int j=i+1;j<=n;j++) { tot+=a[j]; sum[i][j]=tot; } } } void work() { for(int d=2;d<=n;d++) { for(int i=1;i<=n-d+1;i++) { int j=i+d-1; f_min[i][j]=0x7fffffff/2; for(int k=i;k<j;k++) { f_max[i][j]=my_max(f_max[i][j],f_max[i][k]+f_max[k+1][j]); f_min[i][j]=my_min(f_min[i][j],f_min[i][k]+f_min[k+1][j]); } f_max[i][j]+=sum[i][j]; f_min[i][j]+=sum[i][j]; } } cout<<f_min[1][n]<<endl; cout<<f_max[1][n]<<endl; } int my_min(int x,int y) { if(x<y)return x; else return y; } int my_max(int x,int y) { if(x>y)return x; else return y; }
Pascal :
program p22945; var f1,f2:array[0..500,0..500]of longint; i,j,k,n,l,m1,m2:longint; a,sum:array[0..500]of longint; begin readln(n); for i:=1 to n do begin read(a[i]); sum[i]:=sum[i-1]+a[i]; end; fillchar(f1,sizeof(f1),0); fillchar(f2,sizeof(f2),0); for i:=2 to n do for j:=1 to n-i+1 do begin m1:=-maxlongint;m2:=maxlongint; for k:=1 to i-1 do begin if m1<f1[k,j]+f1[i-k,j+k] then m1:=f1[k,j]+f1[i-k,j+k]; if m2>f2[k,j]+f2[i-k,j+k] then m2:=f2[k,j]+f2[i-k,j+k]; end; f1[i,j]:=m1+sum[j+i-1]-sum[j-1]; f2[i,j]:=m2+sum[j+i-1]-sum[j-1]; end; writeln(f2[n,1]); writeln(f1[n,1]); end.
- 1
信息
- ID
- 2171
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者