Noip2012-國王遊戲
阿新 • • 發佈:2018-11-06
“使賞賜最多的大臣獲得的賞賜儘可能少”
這類題目要麼是二分,要麼是貪心。emmmmm這題看上去比較像貪心(不要問我為啥就是玄學orz)
考慮兩個大臣x,y,(對於i來說,左手的數字是a[i].l,右手的數字是a[i].r)
如果x排在y前面,
則有:total*a[x].l/a[y].r<total*a[y].l/a[x].r
所以:a[x].l*a[x].r<a[y].l*a[y].r
然後排個序就沒了啊……
上程式碼!!!
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int maxn=1005; typedef long long ll; struct node { int l,r; }a[maxn]; int cmp(node x,node y) { return x.l*x.r<y.l*y.r; } int main() { int n,kl,kr;scanf("%d%d%d",&n,&kl,&kr); for(int i=1;i<=n;i++) scanf("%d%d",&a[i].l,&a[i].r); ll s=kl; sort(a+1,a+1+n,cmp); ll maxv=0; for(int i=1;i<=n;i++) { maxv=max(maxv,s/a[i].r); s*=a[i].l; } cout<<maxv<<endl; return 0; }
emmmm這題是要高精的然而我懶得寫emmmmm
總結一下:
對於這種簡單貪心來說,考慮2個元素滿足什麼條件才能保證x排在y前面
然後總結出公式sort一下就好啦。
嘿嘿嘿超快樂。