4 solutions

  • 1
    @ 2024-7-26 14:34:15
    #include<bits/stdc++.h>
    using namespace std;
    const int N=410;
    int w[N];
    int s[N];
    int f[N][N],g[N][N];
    int main()
    {
    	int n;
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>w[i];  
    		w[i+n]=w[i];
    	}
    	for(int i=1;i<=2*n;i++)
    	{
    		s[i]=s[i-1]+w[i
    	{
    		int r=l+len-
    		for(int l=1;l+len-1<=2*n;l++)1;
    		for(int k=l;k<r;k++)
    		{);
    }
    for(int len=2;len<=n;len++)
    {
    		{
    			int r=l+len-1;
    			for(int k=l;k<r;k++)
    			{
    				g[l][r]=max(g[l][r],g[l][k]+g[k+1][r]+s[r]-s[l-1]);
    			}
    		}
    	}
    	int maxv=0;;
    	for(int i=1;i<=n;i++)];
    }
    memset(f,0x3f,sizeof f);
    memset(g,0xcf,sizeof g);
    for(int i=1;i<=2*n;i++)
    {
    	f[l][r]=min(f[
    
    }
    }
    int minv=2e9;
    for(int i=1;i+n-1<=2*n;i++)l][r],f[l][k]+f[k+1][r]+s[r]-s[l-1]
    f[i][i]=0;
    g[i][i]=0;
    }
    for(int len=2;len<=n;len++)
    {
    	{
    		minv=min(minv,f[i][i+n-1]);
    	}
    	for(int l=1;l+len-1<=2*n;l++)
    	{
    		maxv=max(maxv,g[i][i+n-1]);
    	}
    	cout<<minv<<endl<<maxv<<endl;
    	return 0;
    }
    
    • 1
      @ 2024-7-25 15:19:53
      #include<bits/stdc++.h>
      using namespace std;
      const int N=410;
      int w[N];
      int s[N];
      int f[N][N],g[N][N];
      int main()
      {
         int n;
         cin>>n;
         for(int i=1;i<=n;i++)
         {
            cin>>w[i];  
            w[i+n]=w[i];
         }
         for(int i=1;i<=2*n;i++)
         {
            s[i]=s[i-1]+w[i];
         }
         memset(f,0x3f,sizeof f);
         memset(g,0xcf,sizeof g);
         for(int i=1;i<=2*n;i++)
         {
            f[i][i]=0;
            g[i][i]=0;
         }
         for(int len=2;len<=n;len++)
         {
            for(int l=1;l+len-1<=2*n;l++)
            {
               int r=l+len-1;
               for(int k=l;k<r;k++)
               {
                  f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]+s[r]-s[l-1]);
               }
            }
         }
         int minv=2e9;
         for(int i=1;i+n-1<=2*n;i++)
         {
            minv=min(minv,f[i][i+n-1]);
         }
         for(int len=2;len<=n;len++)
         {
            for(int l=1;l+len-1<=2*n;l++)
            {
               int r=l+len-1;
               for(int k=l;k<r;k++)
               {
                  g[l][r]=max(g[l][r],g[l][k]+g[k+1][r]+s[r]-s[l-1]);
               }
            }
         }
         int maxv=0;;
         for(int i=1;i<=n;i++)
         {
            maxv=max(maxv,g[i][i+n-1]);
         }
         cout<<minv<<endl<<maxv<<endl;
         return 0;
      }
      
      • 0
        @ 2024-7-25 15:13:03
        #include<bits/stdc++.h>
        using namespace std;
        const int N=410;
        int w[N];
        int s[N];
        int f[N][N],g[N][N];
        int main()
        {
            int n;
            cin>>n;
            for(int i=1;i<=n;i++)
            {
                cin>>w[i];  
                w[i+n]=w[i]; //扩展
            }
            for(int i=1;i<=2*n;i++)
            {
                s[i]=s[i-1]+w[i]; //前缀和
            }
            memset(f,0x3f,sizeof f); //初始化无穷大
            memset(g,0xcf,sizeof g); //初始化无穷小
            for(int i=1;i<=2*n;i++)  //初始化自己
            {
                f[i][i]=0;
                g[i][i]=0;
            }
            for(int len=2;len<=n;len++) //枚举区间长度
            {
                for(int l=1;l+len-1<=2*n;l++) //区间左端点
                {
                    int r=l+len-1; //区间右端点
                    for(int k=l;k<r;k++) //枚举合并点
                    {
                        f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]+s[r]-s[l-1]);
                    }
                }
            }
            int minv=2e9; //最小值
            for(int i=1;i+n-1<=2*n;i++)
            {
                minv=min(minv,f[i][i+n-1]); //枚举长度为n的区间合并最小值
            }
            for(int len=2;len<=n;len++)
            {
                for(int l=1;l+len-1<=2*n;l++)
                {
                    int r=l+len-1;
                    for(int k=l;k<r;k++)
                    {
                        g[l][r]=max(g[l][r],g[l][k]+g[k+1][r]+s[r]-s[l-1]);
                    }
                }
            }
            int maxv=0;;
            for(int i=1;i<=n;i++)
            {
                maxv=max(maxv,g[i][i+n-1]);
            }
            cout<<minv<<endl<<maxv<<endl;
            return 0;
        }
        
        • -1
          @ 2024-10-30 19:46:17

          • @ 2025-1-21 9:28:03

            乐子

          • @ 2025-1-26 10:05:39

            有妈生没妈教

          • @ 2025-1-26 10:06:28

            连乐子的出处都不知道,无敌了

        • 1

        Information

        ID
        997
        Time
        1000ms
        Memory
        256MiB
        Difficulty
        7
        Tags
        (None)
        # Submissions
        40
        Accepted
        11
        Uploaded By