2 条题解

  • 0
    @ 2025-10-8 16:52:59
    #include<bits/stdc++.h>
    using namespace std;
    typedef __int128 ll;
    const int N=110;
    ll a[N],f[N][N],d[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()
    {
        d[0]=1;for(int i=1;i<=100;i++)d[i]=d[i-1]*2;
        int n,m;qr(n),qr(m);
        ll ans=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)qr(a[j]);
            for(int j=1;j<=m;j++)f[j][j]=a[j]*d[m];
            for(int k=2;k<=m;k++)
            {
                for(int l=1;l<=m-k+1;l++)
                {
                    int r=l+k-1;
                    f[l][r]=max(f[l+1][r]+a[l]*d[m-(r-l)],f[l][r-1]+a[r]*d[m-(r-l)]);
                }
            }
            ans+=f[1][m];
        }
        qw(ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:52:50
      #include<bits/stdc++.h>
      using namespace std;
      typedef __int128 ll;
      const int N=110;
      ll a[N],f[N][N],d[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()
      {
          d[0]=1;for(int i=1;i<=100;i++)d[i]=d[i-1]*2;
          int n,m;qr(n),qr(m);
          ll ans=0;
          for(int i=1;i<=n;i++)
          {
              for(int j=1;j<=m;j++)qr(a[j]);
              for(int j=1;j<=m;j++)f[j][j]=a[j]*d[m];
              for(int k=2;k<=m;k++)
              {
                  for(int l=1;l<=m-k+1;l++)
                  {
                      int r=l+k-1;
                      f[l][r]=max(f[l+1][r]+a[l]*d[m-(r-l)],f[l][r-1]+a[r]*d[m-(r-l)]);
                  }
              }
              ans+=f[1][m];
          }
          qw(ans);
          return 0;
      }
      • 1

      *【动态规划:区间中间推】[NOIP2007 提高组]矩阵取数游戏

      信息

      ID
      728
      时间
      1000ms
      内存
      512MiB
      难度
      5
      标签
      递交数
      32
      已通过
      16
      上传者