一道纯贪心
既然没有题解,我就发一篇
这道题主要就是
不能钻牛角尖
题目中的拍照,一个人不能站或趴在另一个人身上(要这样想题目就难了不少)
大致思路如下:
枚举高度,算出对应的最小的宽(这里要用到贪心),乘一下,打擂台,就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; }