CF524B 题解
Posted zhouzhihao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF524B 题解相关的知识,希望对你有一定的参考价值。
一道纯贪心
既然没有题解,我就发一篇
这道题主要就是
不能钻牛角尖
题目中的拍照,一个人不能站或趴在另一个人身上(要这样想题目就难了不少)
大致思路如下:
枚举高度,算出对应的最小的宽(这里要用到贪心),乘一下,打擂台,就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 题解的主要内容,如果未能解决你的问题,请参考以下文章