题解

1 条题解

  • 0
    @ 2022-08-03 21:57:22
    #include<bits/stdc++.h>
    using namespace std;
    int a[805],b[805];
    long long f[805][805],g[805];
    int n,k;
    int main()
    {
        scanf("%d%d",&n,&k);
        for(int i=1; i<=n; i++)
            scanf("%d%d",&a[i],&b[i]);
        for(int i=1; i<n; i++)
            if(a[i]+a[i+1]<=k)
                f[i][i+1]=b[i]+b[i+1];
            else
                f[i][i+1]=INT_MIN;
        for(int d=3; d<=n; d+=2)
            for(int i=1; i+d<=n; i++)
            {
                int j=i+d;
                f[i][j]=INT_MIN;
                if(a[i]+a[j]<=k)
                    f[i][j]=f[i+1][j-1]+b[i]+b[j];
                for(int k=i+1; k<j; k++)
                    if(k-i&1)
                        f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]);
            }
        for(int i=2; i<=n; i++)
        {
            g[i]=g[i-1];
            for(int j=1; j < i; j++)
                if(f[j][i]>0)
                    g[i]=max(g[i], g[j-1]+f[j][i]);
        }
        printf("%lld\n",g[n]);
        return 0;
    }
    
  • 1

信息

ID
1442
难度
7
分类
(无)
标签
递交数
2
已通过
1
通过率
50%
上传者