贪心(排序)

这类贪心问题就是找到一个前后关系的等式,然后在化简的时候是一定会把关键变量消去的,就只和这两个元素的性质有关,和前面的所有元素都无关,一般步骤如下:

  1. 先假定一个前后顺序,将其作为正确的
  2. 依照这个顺序列出关系式
  3. 化简后的到一个式子
  4. 写入cmp,用sort排序
  5. 求解

 

下面是3个例题:

image.png

解法:

假定其中的两个元素(机器人)是pq,设下面两个顺序的准确性是这样的:

————pq———— ✅ ————qp———— ❌

那么:qa(pa*x+b)+qb > pa(qa*x+qb)+pb

得到: qa*pb+qb > pa*qb+pb

#include <iostream>
#include <algorithm>
using namespace std;

struct robot {
    int a,b;
}rb[22];

bool cmp(robot x,robot y) {
    return y.a*x.b+y.b>x.a*y.b+x.b;
}
void pt(__int128 a) {
    if(a>9) pt(a/10);
    putchar(a%10+'0');
}
int main() {
    int n,x;
    cin>>n>>x;
    for(int i=0;i<n;i++)
        cin>>rb[i].a>>rb[i].b;
    sort(rb,rb+n,cmp);
    __int128 result=x;
    for(int i=0;i<n;i++) {
        result=rb[i].a*result+rb[i].b;
    }
    pt(result);
} 

image.png

解法:∏是前面大臣左手累乘∑

————pq———— ✅ ————qp———— ❌

那么:

p: ∏/pr                 ①               ∏*ql/pr            ③

q: ∏*pl/qr             ②               ∏/qr                ④

有: max(1,2) <=     max(3,4)

但: 1<3 && 2>4      

必须有: 2<3

即: ∏*pl/qr         <      ∏*ql/pr     

得到: pl*pr     <    ql*qr

image.png

解法:∑是已用的时间和

————pq———— ✅ ————qp———— ❌

那么:

p: (∑+tp)*dp                        (∑+2*tq+tp)*dp

q: (∑+2*tp+tq)*dq                (∑+tq)*dq

有:(∑+tp)*dp + (∑+2*tp+tq)*dq  < (∑+2*tq+tp)*dp + (∑+tq)*dq

得:                            tp*dq     < tq*dp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值