2 条题解

  • 0
    @ 2025-10-8 16:53:51
    #include<bits/stdc++.h>
    using namespace std;
    struct node{int l,r;}a[201];
    int f[501][501];
    int main()
    {
        int n;scanf("%d", &n);
        for(int i=1;i<=n;i++)scanf("%d%d", &a[i].l, &a[i].r);
        memset(f, 63, sizeof(f));
        for(int i=1;i<=n;i++) f[i][i]=0;
        for(int L=2;L<=n;L++)
            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] + a[st].l * a[k].r * a[ed].r);
                                                             //+a[st].l*a[k+1].l*a[ed].r
            }
        printf("%d\n", f[1][n]);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:53:43
      #include<bits/stdc++.h>
      using namespace std;
      struct node{int l,r;}a[201];
      int f[501][501];
      int main()
      {
          int n;scanf("%d",&n);
          for(int i=1;i<=n;i++)scanf("%d%d",&a[i].l,&a[i].r);
          memset(f,63,sizeof(f));
          for(int i=1;i<=n;i++) f[i][i]=0;
          for(int L=2;L<=n;L++)
              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]+a[st].l*a[k].r*a[ed].r);
                                                               //+a[st].l*a[k+1].l*a[ed].r
              }
          printf("%d\n",f[1][n]);
          return 0;
      }

      • 1

      *【动态规划:区间中间推】矩阵相乘的次数

      信息

      ID
      768
      时间
      1000ms
      内存
      128MiB
      难度
      3
      标签
      递交数
      51
      已通过
      30
      上传者