• CodeForces


    题目链接http://codeforces.com/problemset/problem/589/B

    题目大意:告诉你n 个矩形,知道矩形的长度和宽度(长和宽可以互换),每个矩形的长度可以剪掉一部分,宽度也同样,求出可以得到多少个一样(每个矩形的长相等,宽也相等)的矩形,使得面积之和最大,并输出长和宽。

    解题思路:将每个矩形的长和宽都存到一个结构体数组内,对矩形的长进行排序,因为最终结果的长一定是某个矩形的长,宽也一定是某个矩形的宽,所以我们枚举长,然后将长大于等于该长度的矩形的宽加入到一个向量中,再对该向量进行排序,再对宽度进行枚举,找到最大值即可。

    详见代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<vector>
     4 #include<algorithm>
     5 #include<cstring>
     6 using namespace std;
     7 typedef long long ll;
     8 const int maxn=4005;
     9 struct node{
    10     ll l,w;
    11     bool operator<(const node& a)const
    12     {
    13         return l<a.l;  //长从小到大排 
    14     }
    15 }st[maxn];
    16 int n;
    17 
    18 int main()
    19 {
    20     cin>>n;
    21     ll a,b;
    22     for(int i=0;i<n;i++)
    23     {
    24         cin>>a>>b;
    25         if(a<b) swap(a,b);
    26         st[i].l=a,st[i].w=b;
    27     }
    28     sort(st,st+n);
    29     ll ans=0,l,w;
    30     vector<ll> k;
    31     for(int i=0;i<n;i++)
    32     {
    33         k.clear();
    34         for(int j=i;j<n;j++)
    35             k.push_back(st[j].w);  //将长度大于等于st[i].l的矩形的宽度加入到向量 
    36         sort(k.begin(),k.end());  //宽度从小到大排 
    37         for(int j=0;j<k.size();j++)
    38         {
    39             ll temp=(ll)(st[i].l*k[j]*(k.size()-j));
    40             if(temp>ans)
    41             {
    42                 ans=temp;
    43                 l=st[i].l;
    44                 w=k[j];
    45             }
    46         }
    47     }
    48     cout<<ans<<endl<<l<<" "<<w<<endl;
    49     return 0;
    50 }
  • 相关阅读:
    堆表、AO表 行存列存
    PostgreSQL/PPAS CPU使用率高的排查及解决办法【转】
    GP 锁表查询
    gp 日常使用脚本
    常用gp_toolkit监控语句
    DG 参数详解
    Flask 中路由系统
    实例化Flask的参数 及 对app的配置
    Flask 中内置的 Session
    Flask中request参数
  • 原文地址:https://www.cnblogs.com/zjl192628928/p/9403769.html
Copyright © 2020-2023  润新知