当前位置: 首页 > 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.gsyq.cn/news/61513.html

相关文章:

  • T701795 平衡
  • 铝单板厂家哪家好?河南霖锋幕墙用品质与实力给出答案
  • 佳能e478扫描
  • 后保研可以中途换老师吗?服务过程中的师资调整机制说明
  • 深入解析:微电子科学与工程专业毕设选题指南:热门方向推荐 2026届
  • 2025新款卫衣厂家推荐:COVERNAT男女薄厚款,简约复古百搭之选
  • 2025年11月最新成都实木隔断源头厂家排名揭晓
  • 2025在职保研规划机构综合评测报告:10 家靠谱机构横向对比
  • 后保研课程可回放?从线上服务体验看后保研课程学习灵活性
  • 2025年深圳这家DSE培训机构成果亮眼
  • 2025 年 11 月卫衣品牌实力推荐榜:薄款/厚款/男款/女款/可水洗/纯棉/连帽/无帽,潮流贴肤与透气百搭的舒适之选
  • 从 “看得见总量” 到 “找得到根源”:隐式内存治理让运维效率翻倍
  • 2025 年 11 月羽绒服厂家潮流推荐榜:薄款/厚款/男款/女款/可水洗/复古款/街头风/通勤/百搭羽绒服,兼具时尚设计与实用保暖的全新选择
  • 11月追加2、2025年质量好的四川红绿灯厂家最新TOP厂家排名 (2)
  • 使用caddy搭建github ipv6 proxy
  • 网站建设企业有哪些,抖音推广/抖音代运营/小红书推广/新闻营销/GEO优化/网络营销/网络推广/新闻发布/网络公关网站建设品牌找哪家
  • geo优化哪家公司做得好?2025年11月行业标杆企业盘点
  • 2025年债务优化律所专业评测:实力对比与服务特色分析
  • AI元人文体系深度研究:从价值对齐困境到人机共生文明的理论革新
  • 植物大战僵尸杂交版下载安装教程(PC/安卓/iOS 全平台指南 常见问题解决)
  • 2025 年 11 月卫衣品牌实力推荐榜:薄款/厚款/男款/女款/可水洗/纯棉/连帽/无帽,兼顾透气贴肤与潮流百搭的舒适之选
  • 沈阳铁西区账哪家靠谱,铁西区代理记账公司,铁西区代账哪家好:君美达财务口碑推荐
  • 硬件平台统一的notification_manager提示信号管理方法
  • 2025薄款/厚款/男女款/可水洗羽绒服厂家推荐,COVERNAT简约复古百搭之选
  • 2025年评价高的四川雨棚厂家推荐及采购指南
  • 某中心技术故障与封装代币价格崩溃解析
  • Windows Hello相机无法启动?三套解决方案帮你敏捷修复
  • 全流程自动化与成本结构优化——睿标AI的降本增效实践
  • 2025下半年北京朝阳区/通州区/西城区/东城区/丰台区/海淀区遗产纠纷继承律师服务专业指南:十大精选律所推荐
  • Manacher——最长回文子串问题