2 条题解

  • 0
    @ 2025-10-8 16:48:44
    #include<bits/stdc++.h>
    using namespace std;
    int a[210], sa[210], f[210][210];
    int main()
    {
        int n;scanf("%d", &n);
        for(int i=1;i<=n;i++)scanf("%d", &a[i]);
        
        int ans=0x1fffffff;//5亿 
        for(int t=1;t<n;t++)//枚举交换的情况 
        {
            swap(a[t], a[t+1]);
            sa[0]=0;for(int i=1;i<=n;i++) sa[i]=sa[i-1]+a[i];
            swap(a[t], a[t+1]);//记得恢复原样 
            memset(f, 63, sizeof(f));
            for(int i=1;i<=n;i++)f[i][i]=0;//规模为1的状态 
            for(int L=2;L<=n;L++)//枚举规模为L的所有状态,最后完成规模为n的状态 
                for(int st=1;st<=n-L+1;st++)
                {
                    int ed=st+L-1;
                    for(int k=st;k<ed;k++)
                    {
                        f[st][ed]=min(f[st][ed], f[st][k]+f[k+1][ed]+sa[ed]-sa[st-1]);
                    }
                }
            ans=min(ans, f[1][n]);
        }
        printf("%d\n", ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:48:35
      #include<bits/stdc++.h>
      using namespace std;
      int a[210],sa[210],f[210][210];
      int main()
      {
          int n;scanf("%d",&n);
          for(int i=1;i<=n;i++)scanf("%d",&a[i]);
          
          int ans=0x1fffffff;//5亿 
          for(int t=1;t<n;t++)//枚举交换的情况 
          {
              swap(a[t],a[t+1]);
              sa[0]=0;for(int i=1;i<=n;i++) sa[i]=sa[i-1]+a[i];
              swap(a[t],a[t+1]);//记得恢复原样 
              memset(f,63,sizeof(f));
              for(int i=1;i<=n;i++)f[i][i]=0;//规模为1的状态 
              for(int L=2;L<=n;L++)//枚举规模为L的所有状态,最后完成规模为n的状态 
                  for(int st=1;st<=n-L+1;st++)
                  {
                      int ed=st+L-1;
                      for(int k=st;k<ed;k++)
                      {
                          f[st][ed]=min(f[st][ed],f[st][k]+f[k+1][ed]+sa[ed]-sa[st-1]);
                      }
                  }
              ans=min(ans,f[1][n]);
          }
          printf("%d\n",ans);
          return 0;
      }

      <br />
      

      <br />
      

      • 1

      *【动态规划:区间中间推】最小交换合并问题

      信息

      ID
      240
      时间
      3000ms
      内存
      128MiB
      难度
      5
      标签
      递交数
      171
      已通过
      65
      上传者