zoukankan      html  css  js  c++  java
  • Codeforces Round #513 C

    已知一个长度为n的数组a和一个长度为m的数组b,问当两者相乘组成矩阵时求满足子矩阵中所有数相加小于x的最大面积

    数学题,这个问题可以转化为从A和B中找到一个子阵列,使得这些子阵列的元素总和的乘积小于或等于x,并且它们的大小的乘积是最大的

    #include <bits/stdc++.h>
    #define ll long long
    
    using namespace std;
    
    const int maxn=2000+10;
    
    ll a[maxn],b[maxn],minsa[maxn],minsb[maxn];
    ll n,m,x;
    
    int main()
    {
        ios::sync_with_stdio(false);cin.tie(0);
        cin>>n>>m;
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        for(int i=0;i<m;i++){
            cin>>b[i];
        }
        cin>>x;
        for(int i=0;i<maxn;i++)
            minsa[i]=minsb[i]=x+1;
    
        for(int i=0;i<n;i++)
        {
            ll sum=0;
            for(int j=i;j<n;j++)
            {
                sum+=a[j];
                minsa[j-i+1]=min(minsa[j-i+1],sum);
    
            }
        }
        for(int i=0;i<m;i++)
        {
            ll sum=0;
            for(int j=i;j<m;j++)
            {
                sum+=b[j];
                minsb[j-i+1]=min(minsb[j-i+1],sum);
            }
        }
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++){
                if(minsa[i]*minsb[j]<=x) ans=max(ans,i*j);
            }
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    Pascal's Triangle II
    Pascal's Triangle
    Path Sum II
    Path Sum
    plusOne
    Divide Two Integers
    64. ZigZag Conversion
    63. Swap Nodes in Pairs && Rotate List && Remove Nth Node From End of List
    62. Divide Two Integers
    61. Unique Paths && Unique Paths II
  • 原文地址:https://www.cnblogs.com/Fy1999/p/9745646.html
Copyright © 2011-2022 走看看