当前位置: 首页 > news >正文

【梦境审查】前后缀的使用

PixPin_2025-11-26_11-27-28

如题可以知道,我们会随机更改某一个节点的值,同时我们需要计算在该路径全程的能量最低点(谷底);我们又发现,该节点的值的改变,只会影响该节点往后的谷底(谷底需要减去b[i]),前驱节点的谷底不受影响,因此我们引入“前后缀”来解决该问题。
我们增加一个节点n+1来替代环路;
我们设置:

  • prefix[i]为节点[0,i+1]之间的谷底,而subfix[i]为[i+1,n+1]之间的谷底;
  • 同时为了计算前后缀,我们使用acc[i]来记录到达第i+1个节点的时候的总能量开销;\(acc[0]=a[0]\);\(acc[n]=\sum_{i=0}^{n}a[i]+\sum_{i=1}^{n}b[i]\)
  • prefix[i] = max(prefix[i-1],acc[i]);subfix[i]=max(subfix[i+1],acc[i]);
  • 因此最终的结果为如果第i个节点出事,w[i]=max(prefix(i-1),subfix(i)+b[i]);\(i\in[1,n]\)
    根据这个写出代码;
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;int main(){int n;vector<int> a;//0-nvector<int> b;//0-n,b[i]=0;vector<int> w;//vector<int> cost_earn;cin >> n;for(int i = 0;i<=n;i++){int temp;cin >> temp;a.push_back(temp);}for(int i = 0;i <= n;i++){int temp;if(i == 0){temp=0;}else{cin >> temp;}b.push_back(temp);}vector<int> acc(n+1);vector<int> prefix(1+n);vector<int> subfix(1+n);acc[0] = a[0];prefix[0]=a[0];for(int i = 1;i <= n;i++){acc[i] = acc[i-1] + a[i]-b[i];prefix[i] = max(prefix[i-1],acc[i]);}subfix[n] = acc[n];for(int i = n-1;i > 0;i--){subfix[i] = max(subfix[i+1],acc[i]);}for(int i = 1;i <=n;i++){w.push_back(max(prefix[i-1],subfix[i]+b[i]));}for(auto iter = w.begin();iter != w.end();iter++){cout << *iter << " ";}cout<<endl;
}

暴力解法:
二分查找,从0找到\(\sum_{i=0}^{n}a[i]\);

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
vector<int> a;//0-n
vector<int> b;//0-n
bool canReach(int energy,int j,int n){for(int i = 0;i <= n;i++){if(i == 0){energy -= a[i];if(energy < 0){return false;}}else if(i == j){energy -= a[i];if(energy < 0){return false;}}else{energy -= a[i];energy += b[i];if(energy < 0){return false;}}}return true;
}int main(){int n;cin >> n;int max_cost = 0;for(int i = 0;i<=n;i++){int temp;cin >> temp;a.push_back(temp);max_cost+=temp;}for(int i = 0;i <= n;i++){int temp;if(i == 0){temp=0;}else{cin >> temp;}b.push_back(temp);}for(int i = 1;i <=n;i++){int L = a[0];int R = max_cost;int mid = (L+R)/2;while(L < R){bool judge = canReach(mid,i,n);if(judge){//mid够了,放大范围R = mid;mid = (L+R)/2;continue;}else if(!judge){//mid不够,需要缩小范围L = mid + 1;mid = (L+R)/2;continue;}}if(canReach(L,i,n)){cout << L <<" ";}else if(canReach(R,i,n)){cout << R<<" ";}}cout<<endl;
}

二分思想:
浮点:

mid = (L+R)*0.5;
if check(mid):
R = mid;
else:
L = mid;

终止:while(abs(R-L)>eps);
可行解:mid
整数:

mid = (L+R)/2;
if check(mid):
R = mid;
else:
L = mid+1;

终止:while(L < R)
可行解:mid

http://www.jsqmd.com/news/51604/

相关文章:

  • 2025墨西哥海外仓全方位评测:十大物流企业深度解析
  • 2025年11月最新最全的AI搜索优化公司与GEO优化公司排行榜:7家国内头部Top级GEO服务商深度解析与AIEO推荐指南
  • T701795 平衡
  • 日志重定向:让 qDebug() 实时显示在 Qt 窗口中
  • 铝单板厂家哪家好?河南霖锋幕墙用品质与实力给出答案
  • 活动预告|本周六!IvorySQL 邀您相聚第八届中国 PostgreSQL 数据库生态大会
  • 后保研可以中途换老师吗?服务过程中的师资调整机制说明
  • 深入解析:微电子科学与工程专业毕设选题指南:热门方向推荐 2026届
  • 突破成绩限制:后保研如何助力不同排名学生实现院校跃升?
  • 保研规划哪家有保障?这份保研机构挑选指南请收好
  • 2025新款卫衣厂家推荐:COVERNAT男女薄厚款,简约复古百搭之选
  • 年会策划公司哪家性价比高?这十大策划公司按需选配不花冤枉钱!
  • 2025年11月最新成都实木隔断源头厂家排名揭晓
  • 2025 年 11 月棒球帽品牌实力推荐榜:涵盖薄款/厚款/男款/女款/可水洗/复古款/潮流款/运动款,精选百搭设计与舒适面料之选
  • 分布式架构原理与实现---第二篇
  • 2025在职保研规划机构综合评测报告:10 家靠谱机构横向对比
  • 车规TVS管行业现状与技术发展趋势分析-ASIM阿赛姆
  • 后保研课程可回放?从线上服务体验看后保研课程学习灵活性
  • 2025年深圳这家DSE培训机构成果亮眼
  • 2025 年 11 月卫衣品牌实力推荐榜:薄款/厚款/男款/女款/可水洗/纯棉/连帽/无帽,潮流贴肤与透气百搭的舒适之选
  • ALV爱乐惟国际教育:深耕A-Level课程,助你直通世界名校
  • 送女朋友礼物推荐:极萌胶原炮领衔10款好礼,从少女肌到仪式感全拿捏
  • 从 “看得见总量” 到 “找得到根源”:隐式内存治理让运维效率翻倍
  • Docker安装(基于云服务器ECS实例 CentOS 7.9系统) - 教程
  • 2025 年 11 月羽绒服厂家推荐排行榜:薄款/厚款/男款/女款/可水洗/抗皱/百搭/潮流款/街头风/小红书热门款,时尚与实用兼具的冬季精选
  • 情人节礼物推荐指南:极萌胶原炮,科技守护她的年轻光芒
  • 2025年高压纳米均质机工厂权威推荐榜单:均质机‌/高压均质机‌/高压细胞破壁机源头工厂精选
  • 2025 年 11 月 GEO 公司口碑指南:多行业企业推荐合集
  • 2025棒球帽厂家推荐:COVERNAT薄款/厚款/男女款可水洗,潮流百搭之选
  • 11月追加2、2025年质量好的四川红绿灯厂家最新TOP厂家排名 (2)