125. 耍杂技的牛

Wi +Si 从小到大排序即为最优。
贪心题很多都是按照某种形式排序,那么可以从排序入手,第i个节点和第i+1个节点交互,如果不会产生更坏的结果,那要满足什么条件,然后就按照这个条件排序,比如这题如果满足wi+1+si+1<si+wi,那么最大值不会变大,。
在这里插入图片描述

添加链接描述

#include<bits/stdc++.h>
#define ll long long
#define x first
#define y second
#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
using namespace std;
const int M=1e5+5,INF=0x3f;
typedef pair<ll,ll> ppi;
vector<ppi>a;
ll pre[M];
bool cmp(ppi tx,ppi ty)
{
    return tx.x+tx.y<ty.x+ty.y;
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        ll l,r;
        cin>>l>>r;
        a.push_back({l,r});
    }
    sort(a.begin(),a.end(),cmp);
    ll ans=-1e18;
    for(int i=1;i<=a.size();i++)
        {
            pre[i]=pre[i-1]+a[i-1].x;
            ans=max(pre[i-1]-a[i-1].y,ans);
        }
    cout<<ans<<endl;
    return 0;
}

### C++ 实现贪心算法解决杂技表演问题 对于给定的奶杂技问题,目标是在满足条件的情况下使尽可能多的奶参与表演。此问题可以通过贪心策略来求解。 #### 输入处理 程序首先读取输入数据,包括奶的数量`N`及其各自的重量和强壮度。为了简化后续计算,可以定义结构体存储每只奶的信息并将其存入数组中以便操作: ```cpp struct Cow { int weight; int strength; }; Cow cows[20001]; ``` 接着初始化变量用于记录当前累积的压力总和以及已经加入队伍中的成员数目: ```cpp long long totalPressure = 0LL, count = 0LL; ``` #### 数据预处理 考虑到排序后的序列有助于找到局部最优解从而构建全局最优方案,在正式进入循环之前先按照特定规则对原始列表进行升序排列[^3]: ```cpp sort(cows + 1, cows + n + 1, [](const Cow &a, const Cow &b){ return a.weight + b.strength < b.weight + a.strength; }); ``` 这里采用的是比较函数`(weight + strength)`从小到大排序的方式,因为这样能保证较早被选中的个体不会给后来者带来过多额外负担。 #### 主逻辑流程 遍历已排序好的队列,逐个评估能否接纳新的参与者直到无法继续为止。每当成功添加一头新时更新累加器,并增加计数器;一旦发现违反约束则立即停止迭代过程输出结果: ```cpp for (int i = 1; i <= n && totalPressure + cows[i].weight <= cows[i].strength; ++i) { totalPressure += cows[i].weight; ++count; } cout << count << endl; ``` 上述代码片段实现了完整的解决方案框架,通过合理安排顺序使得最终形成的堆叠最为稳固可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值