码迷,mamicode.com
首页 > 其他好文 > 详细

CF524B 题解

时间:2019-07-19 23:51:34      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:nbsp   开始   turn   最小   枚举   name   font   nod   lse   

一道纯贪心

既然没有题解,我就发一篇


这道题主要就是

不能钻牛角尖

题目中的拍照,一个人不能站或趴在另一个人身上(要这样想题目就难了不少)

大致思路如下:

枚举高度,算出对应的最小的宽(这里要用到贪心),乘一下,打擂台,就OK了

关于枚举高度,那就从最大值开始递减可以尽量节约时间

由于数据很弱,下面这个弱弱的代码就能AC

#include<bits/stdc++.h>
using namespace std;
struct node{
    int w,h;
}a[1050];
int n;
long long ans=2e9;
int main()
{
    cin>>n;
    int max_h=0,min_h=2e9;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].w>>a[i].h;
        max_h=max(max_h,a[i].h);
        max_h=max(max_h,a[i].w);

        min_h=min(min_h,a[i].h);
        min_h=min(min_h,a[i].w);
    }

    for(int i=max_h;i>=min_h;i--)
    {
        bool flag=false;
        int w=0;
        for(int j=1;j<=n;j++)
        {
            int maxn=max(a[j].h,a[j].w);
            int minn=min(a[j].h,a[j].w);
            if(minn>i)//两边长都超出此高度,直接break外层循环 
            {
                flag=true;
                break;
            }
            if(maxn>i) w+=maxn;//maxn不能做高,只能加进宽 
            else w+=minn;//两边长都在高度范围内,从贪心的角度,选小的加进去 
        }
        if(flag) break;
        long long t=w*i;
        ans=min(ans,t);
    }
    cout<<ans;
    return 0;
}

 

CF524B 题解

标签:nbsp   开始   turn   最小   枚举   name   font   nod   lse   

原文地址:https://www.cnblogs.com/zhouzhihao/p/11216118.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!