2 条题解

  • 0
    @ 2025-10-8 16:58:44
    #include <bits/stdc++.h>
    using namespace std;
    const int N=55;
    __int128 a[2*N], f[2*N][2*N];
    template<typename T>void qr(T& x)
    {
        x=0;int f=1;char c=getchar();
        for( ;!isdigit(c);c=getchar())if(c=='-')f=-1;
        for( ; isdigit(c);c=getchar())x=x*10+c-48;
        x=x*f;
    }
    template<typename T>void qw(T x)
    {
        if(x<0)x=-x,putchar('-');
        if(x/10)qw(x/10);
        putchar(x%10+48); 
    }
    int main()
    {
        int n;scanf("%d", &n);
        for(int i=1;i<=n;i++)qr(a[i]),a[i+n]=a[i];
        memset(f, 63, sizeof(f));
        for(int k=1;k<=n;k++)
            for(int i=1;i<=2*n-k;i++)
            {
                int j=i+k-1;
                if(k<=2){f[i][j]=0;continue;}
                for(int l=i+1;l<=j-1;l++)
                    f[i][j]=min(f[i][j],f[i][l]+f[l][j]+a[i]*a[j]*a[l]);
            }
        __int128 ans=__int128(1)<<120;
        for(int i=1;i<=n;i++) ans=min(ans,f[i][i+n-1]);
        qw(ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:58:33
      #include<bits/stdc++.h>
      using namespace std;
      const int N=55;
      __int128 a[2*N],f[2*N][2*N];
      template<typename T>void qr(T& x)
      {
      	x=0;int f=1;char c=getchar();
      	for( ;!isdigit(c);c=getchar())if(c=='-')f=-1;
      	for( ; isdigit(c);c=getchar())x=x*10+c-48;
      	x=x*f;
      }
      template<typename T>void qw(T x)
      {
      	if(x<0)x=-x,putchar('-');
      	if(x/10)qw(x/10);
      	putchar(x%10+48); 
      }
      int main()
      {
      	int n;scanf("%d",&n);
      	for(int i=1;i<=n;i++)qr(a[i]),a[i+n]=a[i];
      	memset(f,63,sizeof(f));
      	for(int k=1;k<=n;k++)
      		for(int i=1;i<=2*n-k;i++)
      		{
      			int j=i+k-1;
      			if(k<=2){f[i][j]=0;continue;}
      			for(int l=i+1;l<=j-1;l++)
      				f[i][j]=min(f[i][j],f[i][l]+f[l][j]+a[i]*a[j]*a[l]);
      		}
      	__int128 ans=__int128(1)<<120;
      	for(int i=1;i<=n;i++) ans=min(ans,f[i][i+n-1]);
      	qw(ans);
          return 0;
      }
      • 1

      *【动态规划:区间中间推】凸多边形的划分

      信息

      ID
      1813
      时间
      1000ms
      内存
      512MiB
      难度
      7
      标签
      递交数
      25
      已通过
      9
      上传者