2025/1/20课堂记录

news/2025/1/20 21:23:08/文章来源:https://www.cnblogs.com/yongshao/p/18682348

目录

  1. 绿色通道
  2. 最大连续和
  3. 修剪草坪
  4. 旅行问题

  • 绿色通道

已经讲了好多遍了(2025/1/11,2024/12/21),现在详细捋一下思路

首先上来,最有辨识度的就是“最长”空题段“最小”

就是最大值最小——二分答案

木材加工闻着味就过来了(详见2024/12/28)

但这还和木材加工不太一样,check部分不一样

这里要算的是空mid道题,用t分钟能不能实现

那么在固定空mid道题的情况下,从前往后算最小花费时长

f[i]=min(f[i-1],f[i-2],f[i-3]...f[j]...f[i-mid],f[i-mid-1])<—括号里面共有mid个数

用一个小dp就能解决啦

至于单调队列优化,还是看之前讲的吧
#include<iostream>
using namespace std;
int dp[51000],a[51000],n,t;
int check(int mid)
{for(int i=1;i<=mid+1;i++)dp[i]=a[i];//单调队列优化后,一个补0就能解决这行 for(int i=mid+2;i<=n;i++){dp[i]=0x3f3f3f3f;for(int j=i-mid-1;j<=i-1;j++)dp[i]=min(dp[j]+a[i],dp[i]);	} int ans=0x3f3f3f3f;for(int i=n-mid;i<=n;i++)ans=min(ans,dp[i]);return ans<=t;
} int main()
{cin>>n>>t;for(int i=1;i<=n;i++)cin>>a[i];int l=0,r=n,ans=0x3f3f3f3f;while(l<=r){int mid=(l+r)/2;if(check(mid))r=mid-1,ans=mid;else l=mid+1;}cout<<ans<<endl;return 0; 
}

  • 最大连续和

也是讲了好多遍了(发现今天的课和2024/12/21的课一模一样)

计算每一个i之前一段距离之和(a[q[l+1]]+a[q[l+2]]+...+a[i-1]+a[i])

可以直接用a[i]-a[q[l]]计算

每一次a[i]都是固定的

想要让a[i]-a[q[l]]尽可能大,那么a[q[l]]就要尽可能小

所以维护的是a[q[l]]的单调递增,那就要把比新来的更大的删掉

        while(l<r&&a[q[r-1]]>a[i])r--;

剩下套模板~~

~~~~~~~
 #include<iostream>
using namespace std;
int n,m,a[200010],q[200010];
int main()
{cin>>n>>m;for(int i=1;i<=n;i++){int x;cin>>x;a[i]=a[i-1]+x;}int l=0,r=1,ans=-0x3f3f3f3f;for(int i=1;i<=n;i++){while(l<r&&q[l]<i-m)l++;ans=max(ans,a[i]-a[q[l]]);while(l<r&&a[q[r-1]]>a[i])r--;q[r++]=i;}cout<<ans;return 0;
}

  • 修剪草坪

(好了现在和2024/12/21不一样了)

朴素dp之前写过,这里不写了

这里给一个单调队列优化吧
 //https://blog.csdn.net/ybC202444/article/details/127161633
//修建草坪,朴素dp 
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5 ;
#define  ll  long long
ll n,k,a[MAXN],q[MAXN];
ll s[MAXN],dp[MAXN][2];
ll l,r; 
// dp[i][0]: 第i个数不要,1-i之间,最大效率;
// dp[i][1]: 第i个数要,1-i之间,最大效率;
int main()
{cin>>n>>k;for(ll i=1;i<=n;i++){cin>>a[i];s[i]=s[i-1]+a[i];}l=0,r=0;q[l]=0,r=1;// 队头插入0编号//单调队列维护 for(ll i=1;i<=n;i++){while(l<r&&q[l]<i-k)l++;dp[i][0]=max(dp[i-1][1],dp[i-1][0]);dp[i][1]=dp[q[l]][0]+s[i]-s[q[l]];//j不要,j+1---i要//dp[i][1]=(dp[q[l]][0]-s[q[l]]) + s[i]//f[i]=max/min(g(j))+a[i] //维护递减: dp[j][0]-s[j]   while(l<r&&dp[q[r-1]][0]-s[q[r-1]]<dp[i][0]-s[i])r--;q[r++]=i;}printf("%lld\n",max(dp[n][1],dp[n][0]));
}

自己没写


  • 旅行问题

作业

 

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

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

相关文章

Mysql的学习

Mysql建立 索引优化: sql优化: 为了解决下面的索引失效问题序列索引优化:

中考英语优秀范文-014 The hero in my heart 我心中的英雄

1 写作要求 自古以来,人们对英雄的定义没有统一的标准。英雄可以是科学家、军人、运动员,也可以是医生、保安或外卖骑手。假如你是学校广播站的一名英语播报员,明天你准备向大家介绍一位你心目中的英雄,请你根据下面的要点提示,写一篇英语广播稿。 1 须包含提示中的所有内…

python 探空数据根据时间偏移量计算具体时间

这里有一组探空数据,每天08时和20时放气球,气球飞上去的时间就是用时间偏移量来计算的,而不是直接显示好的 根据“年”“月”“日”“时”“时间偏移量”列,时间偏移量单位为秒,计算具体的时间 #!/usr/bin/python3 # -*- coding: utf-8 -*- """ @Time : 20…

LaTeX之符号表

本文介绍了在 $\LaTeX{}$ 中常用的符号。\(\LaTeX{}\) 之符号表 目录\(\LaTeX{}\) 之符号表\(\LaTeX{}\) 普通符号文本/数学模式通用符号希腊字母二元关系符二元运算符巨算符数学重音符号箭头作为重音的箭头符号定界符用于行间公式的大定界符其他符号AMS 符号AMS希腊字符和希伯…

【抓包工具】wireshark零基础使用教程

Wireshark是什么 Wireshark是使用最广泛的一款「开源抓包软件」,常用来检测网络问题、攻击溯源、或者分析底层通信机制。 它使用WinPCAP作为接口,直接与网卡进行数据报文交换。 Wireshark抓包原理 Wireshark使用的环境大致分为两种,一种是电脑直连互联网的单机环境,另外一种…

多端响应式

重要!响应式开发 目录重要!响应式开发是什么?怎么实现?媒体媒体查询断点是什么适配方案栅格布局响应式栅格系统实例 是什么? 多终端显示不同,更好看 PC,ipad,手机适配 怎么实现? 媒体查询,断点: 视口宽不同,布局不同 移动端??? 320-480端口 rem 不考虑大尺寸,更…

公共图床-OIER试炼场

公共图床-OIER试炼场 如何使用? 1. 使用浏览器直接访问 https://api-cdn.u1128333.nyat.app:35910/2. 通过插件访问 插件下载点我 MIT License, ©2025 Chan. 在浏览器扩展中添加即可使用。

32. 样式表

一、样式表为了美化窗口或控件的外观,可以通过窗口或控件的调色板给窗口或控件按照角色和分组设置颜色,还可以对窗口或控件的每个部分进行更细致的控制,这涉及窗口或控件的样式表(Qt style sheets, QSS),它是从 HTML 的层叠样式表(cascading style sheets, CSS)演化而来…

TIA SCL编程清除字符串中所有的空格

今天做一个小的练习,这是2025年第一个记录的学习笔记。 在IA新建一个FC,名字叫做TrimSpace,建立以下内部变量:写一段SCL代码: #len := LEN(#str_in);#str_trim_out := ;FOR #i := 1 TO #len DO   IF MID(IN := #str_in, L := 1, P := #i) <> THEN   …