临项交换

news/2025/10/2 21:23:16/文章来源:https://www.cnblogs.com/-114514/p/19123904

知周所众,10月2日是一个学贪心的好日子(不是

写一下学习总结吧
先写一下印象最深的最简单的(其实不然临项交换

临项交换

例题一:排队接水
知周所众,排队接水的正解是把接水时间少的人放在队伍的前面,那么这背后的原理是什么呢
我们可以设第i个人和第j个人接水的时长为\(t_i\)\(t_j\),显然交换这两个人的位置不会对之前的总时间和之后的总时间产生影响,所以我们可以直接对是否交换的优劣进行判断;
如果要让原先的方式优于交换之后,那么显然有:

\[T(之前的时间)+t_i(第i个人接水的时间)+t_i(第j个人等待的时间)+t_j(第j个人接水的时间)<T+t_j+t_j+t_i \]

化简一下就能得到:

\[t_i<t_j \]

于是我们就能写出这类问题的大致代码:

#include<bits/stdc++.h>
using namespace std;
int n;
double ans;
struct ren{//步骤一:因为要捆绑排序,用结构体储存信息int t,w;
}a[1005];
bool cmp(ren a,ren b){//步骤二:根据每个题写出不同的排序方式(核心)return a.t<b.t;
}
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i].t;a[i].w=i;}sort(a+1,a+1+n,cmp);for(int i=1;i<=n;i++){//步骤三:对排序完后的数据处理cout<<a[i].w<<" ";	cout<<endl;for(int j=1;j<=i-1;j++){ans+=a[j].t;}ans/=n;}printf("%.2lf",ans);return 0;
}

例题二:万能的奶牛
首先想到的可能是先把吃草多的奶牛转移回去,但这明显是不对的,比如有一只吃草为100的奶牛和10只吃草为99的奶牛,而且那只100的奶牛的距离非常远,那显然先转移吃草多的策略就会错;
这里我们可以注意到对于任意两只奶牛,显然交换它们的位置是和排队接水一样对前后都没有影响的;
所以我们仍然可以比较交换第i头和第j头奶牛转移顺序的优劣:

\[T+2*t_i*d_j<T+2*t_j*d_i \]

用同样的方法写出代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,sum[100005];
struct cow{int t,d;
}c[100005];
bool cmp(cow a,cow b){return a.t*b.d<a.d*b.t;
}
int main(){ll ans=0;cin>>n;for(int i=1;i<=n;i++) cin>>c[i].t>>c[i].d;sort(c+1,c+n+1,cmp);for(int i=1;i<=n;i++) sum[i]=sum[i-1]+c[i].d;for(int i=1;i<=n;i++) ans+=(sum[n]-sum[i])*2*c[i].t;cout<<ans;return 0;
}

例题三:皇后游戏
稍难一点点的题,给一下题面:

\[c_{i} = \begin{cases} a_{1}+b_{1} & ,i=1 \\ \displaystyle \max \left \{ c_{i-1},\sum_{j=1}^{i}a_{j} \right \} +b_{i} & ,2\leq i \leq n \end{cases} % ![] \]

计算最大的\(c_i\)的最小值;

首先很容易发现\(c_i\)的值是递增的,所以最大的\(c_i\)就是\(c_n\);所以就是在求\(c_n\)的最小值;
由于\(a_i\)的前缀和和\(b_i\)的值是固定不变的,所以要让\(c_n\)最小,每一个\(c\)都要最小;
这个时候我们就将这个问题转换成了和前面一样的临项交换问题:
对于第i个大臣和第j个大臣,考虑交换他们的优劣:

\(如果不交换i和j,那么c_j就等于:\)

\[max(c_i,A+a_i+a_j)+b_j\ \ (A表示i和j前面所有a的和) \]

\[代入c_i=max(C,A+a_i)+b_i\ \ (C表示c_{i-1})\ 可以得到 \]

\[c_j=max(C+b_i+b_j,A+a_i+b_i+b_j,A+a_i+a_j+b_j)\ (把外面的b_j放进去) \]

\(同理,我们可以写出交换之后的c_i:\)

\[c_i=max(C+b_i+b_j,A+a_j+b_i+b_j,A+a_i+a_j+b_i) \]

\(由于bool\ \ cmp里的条件是不交换的条件,所以判断条件是c_j<c_i\)
\(又因为我们知道max(a,x)<=max(b,x)等价于a<=b,所以可以改变符号然后去掉第一项:\)

\[max(A+a_i+b_i+b_j,A+a_i+a_j+b_j)<=max(A+a_j+b_i+b_j,A+a_i+a_j+b_i) \]

\(然后就可以开心得提出所有相同的项,消去A,得到:\)

\[a_i+b_j+max(a_j,b_i)<=a_j+b_i+max(a_i+b_j) \]

至此我们就得到了这个cmp函数的判断条件,不过知周又所众,sort的cmp判断条件里不能有等于,所以要特判一下:当两式相等时,根据a的大小来决策(别问为什么,问就是面向样例编程);

给出代码(骗你的,这段代码能A五道紫,跟我的五倍经验说去吧):

#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,n,c[20005],sum[20005];
struct ren{int a,b;
}d[20005];
bool cmp(ren i,ren j){if((i.a+j.b+max(j.a,i.b))==(j.a+i.b+max(i.a,j.b))){return i.a<j.a;}return i.a+j.b+max(j.a,i.b)<j.a+i.b+max(i.a,j.b);	
}
signed main(){cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>d[i].a>>d[i].b;sort(d+1,d+n+1,cmp);for(int i=1;i<=n;i++){sum[i]=sum[i-1]+d[i].a;c[i]=max(c[i-1],sum[i])+d[i].b;}cout<<c[n]<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为设备MSTP - 指南

华为设备MSTP - 指南2025-10-02 21:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

CF VP 记录

CF2129 B 因为是排列所以我们可以从小到大考虑每个数。对于一个数,如果不变那么贡献是前面比它大的数个数,如果改变那么贡献是后面比它大的数的个数,取最小值即可。 C 首先我们得找到一个确定的括号,这样我们才可以…

实用指南:Autudl华为昇腾系列NPU简介和部署推理yolo11 yolov8 yolov5目标检测模型

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

LabVIEW与PLC 汽车驻车制动自动调整 - 实践

LabVIEW与PLC 汽车驻车制动自动调整 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

04. 布局管理

一、什么是布局在 Qt Quick 中有两套与元素布局相关的类库,一套叫作 Item Positioner(定位器),一套叫作 Item Layout(布局)。其实在 Qt Quick 中还有一个 锚布局,它通过 Item 的 anchors 属性实现,是 Qt Quick…

关于安装博客园皮肤中有关于配置音乐播放器的补充(awescnb)

首先,关于安装博客园皮肤的教程,请看教程: https://www.yuque.com/awescnb/user 大佬的教程非常详细且通俗易懂,只要有一点点前端基础,很短时间就能安装完成 但有关于音乐播放器的配置中,获取音乐url以及lrc歌词…

AGC VP 记录 2

AGC VP 记录 为了防止上一个内容太多比较卡,故新开了一个。 AGC041~AGC060 AGC060 [AGC060A] No Majority skip。Submission #69562933 - AtCoder Grand Contest 060 [AGC060B] Unique XOR Path给定一个 \(n\times m\…

婚纱定制网站哪个好做特卖网站

第二期云开发0基础训练营热力来袭&#xff01;课程升级、更佳体验、依旧免费&#xff01;每年的 “金九银十” 都是传说中的学习黄金期&#xff01;这期间在校的小伙伴面临开学季/求职季/考研季挑战&#xff0c;已经步入社会的也即将步入年终前的冲刺阶段。所以&#xff0c;这段…

2025 --【J+S 二十连测】-- 第四套 总结

总结 T1 考场上很快想出了正解,并打出了代码,没什么问题 T2 考场上很快就打出了正解,但是由于精度问题,导致失分 T3 考场上没有想到解法,打了个部分分,但是挂0 T4 考场上打了个部分分,哪全了 题解 T1 不难发现,…

无锡市城乡和住房建设局网站wordpress ffmpeg

在手工测试阶段&#xff0c;针对项目输出了测试用例&#xff0c;如果这些测试用例需要在版本迭代的过程中&#xff0c;需要进行回归测试&#xff0c;通过手工重复地执行测试用例&#xff0c;将会耗费大量的人力。 为此应运而生就有了自动化测试&#xff0c;通过使用自动化工具…

深入解析:AI-调查研究-90-具身智能 机器人数据采集与通信中间件全面解析:ROS/ROS2、LCM 与工业总线对比

深入解析:AI-调查研究-90-具身智能 机器人数据采集与通信中间件全面解析:ROS/ROS2、LCM 与工业总线对比pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

函数-装饰器基础知识+推导式

装饰器:    在不改变原函数代码基础上,为原函数扩展功能装饰器格式: ##装饰器的编写(函数的嵌套,外城函数返回内城函数): def wrapper (funk):def inner (*args,**kwags):#自定义共能,根据功能在funk函数执行…

用ip访问没有备案的网站国内外知名市场调研公司

Redis&#xff0c;作为内存数据结构存储的佼佼者&#xff0c;其高性能表现一直备受赞誉。那么&#xff0c;Redis究竟是如何实现这一点的呢&#xff1f;接下来&#xff0c;我们将更深入地探讨其背后的关键技术&#xff0c;并提供进一步的优化策略。 一、内存存储与数据结构设计…

机器人产业学院 —— 教培机构 —— 职业发展 —— 全国性比赛

机器人产业学院 —— 教培机构 —— 职业发展 —— 全国性比赛本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注处,…

VUE - 实战 2

vue 项目 tailwindcss 安装 安装 命令 npm install -D tailwindcss@3 postcss autoprefixer现在 版本4.1 和vue集成有问题,所有用32 初始化配置文件: npx tailwindcss init -p3 修改 tailwind.config.js 配置: /** …

平面设计免费模板网站济南装修网

以下是百度统计的诊断&#xff0c;小弟万般无奈&#xff0c;html上的缓存以及图片处理技巧欠缺&#xff0c;希望各位大大帮帮忙支个招&#xff01; 以下元素可在不损失原信息量的前提下进行压缩&#xff1a; http://www.5atl.com/Style/main.css &#xff08;大小&#xff1a; …

QBXT2025S刷题 Day1

今天的题目 T1 \(90pts\)。 赛时树状数组写挂了。 发现没有特判第一个数是 \(0\)。 我的思路是,\(cnt[x]\) 表示对于所有的 \(h[i] \geq x\) 可以构成多少个区间。 先离散化。 对于当前 \(h[i]\),若 \(h[i - 1] <…

wordpress 仅显示标题seo会被取代吗

在当今快节奏的软件开发领域&#xff0c;提升开发效率是每个开发者都追求的目标。对于 Vue 前端开发而言&#xff0c;Visual Studio Code&#xff08;VSCode&#xff09;已经成为了众多开发者的首选编辑器。而随着人工智能技术的发展&#xff0c;各类 AI 编码扩展工具如雨后春笋…

2025多校冲刺CSP模拟赛1(螳臂复活祭)

写在前面:题解未动,废话先行: 这次的模拟赛,肝硬化竟取得了比它近三次校内模拟赛的总分之和还要高 \(5pts\) 的成绩!(虽然 \(rank~50\) ),兴奋异常(其实没有),遂写博文(其实是前几天没空写)。顺带一提,那…

龙岩做网站的公司网站开发资源网

1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict&#xff0c;在字符串中增加空格来构建一个句子&#xff0c;使得句子中所有的单词都在词典中。返回所有这些可能的句子。 说明&#xff1a; 分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的…