1 条题解

  • 0
    @ 2025-2-14 21:20:42

    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
    上传者