首页 > 其他分享 >2025/1/20课堂记录

2025/1/20课堂记录

时间:2025-01-20 21:21:52浏览次数:1  
标签:12 20 int ll mid 2025 MAXN 课堂 dp

目录

  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]));
}

自己没写


作业

 

标签:12,20,int,ll,mid,2025,MAXN,课堂,dp
From: https://www.cnblogs.com/yongshao/p/18682348

相关文章

  • 2025.1.20——一、[RCTF2015]EasySQL1 二次注入|报错注入|代码审计
    题目来源:buuctf [RCTF2015]EasySQL1目录一、打开靶机,整理信息二、解题思路step1:初步思路为二次注入,在页面进行操作step2:尝试二次注入step3:已知双引号类型的字符型注入,构造payloadstep4:报错注入step5:三爆方法①extractvalue()函数方法②updatexml()函数三、小......
  • 2025 刷题计划 - 线段树
    2025刷题计划-线段树A.P3313[SDOI2014]旅行树剖板子题,开\(C\)棵线段树即可。你可能会说开不下?动态开点不就完了。B.P3924康娜的线段树有意思的一道题,貌似\(O(n\logn)\)解法比\(O(n)\)更难?我实现不出来。首先易得期望的计算方式即为:设当前节点\(x\)的深度为......
  • 20250120 T2 simu题解
    简单模拟(simu)【题目描述】给定$a_1,a_2,\ldots,a_n$和$b_1,b_2,\ldots,b_n$。对于所有整数$x\in[l,r]$,模拟以下过程并求出变量$res$的最终的值。res=0fori=1ton:ifx>=a[i]:x=x-a[i]res=res+b[i]【输入格式】......
  • P1006 [NOIP2008 提高组] 传纸条
    链接https://www.luogu.com.cn/problem/P1006题目思路和方格取数差不多,额外的步骤就是去重:只取当前节点(i,j)的右上或者左下部分。并且最后的答案是dp[m][n-1][m-1][n],只dp到终点的上面和左边一个点代码#define_CRT_SECURE_NO_WARNINGS#include<iostream>#include<a......
  • AAAI2024论文解读|Bidirectional Contrastive Split Learning for Visual Question An
    论文标题BidirectionalContrastiveSplitLearningforVisualQuestionAnswering双向对比分裂学习用于视觉问答论文链接BidirectionalContrastiveSplitLearningforVisualQuestionAnswering论文下载论文作者YuweiSun,HideyaOchiai内容简介本文提出了一种名......
  • 2024年春秋杯网络安全联赛冬季赛部分wp
    部分附件下载地址:https://pan.baidu.com/s/1Q6FjD5K-XLI-EuRLhxLq1Q提取码:jay1Miscday1-简单算术根据提示应该是异或下载文件是一个字符串,写个代码字符串异或解密,由于需要密钥,所以先对单字节密钥进行爆破解密爆破出flag代码如下:cipher_text="ys~xdg/m@]mjkz@vl@z~l......
  • P3456 [POI2007] GRZ-Ridges and Valleys
    P3456[POI2007]GRZ-RidgesandValleys背景本人蒟蒻,只会写DFS。本题BFS更好思路这是一道很明显的搜索题,题目要求我们找到山峰和山谷山峰?不就是在这个高度周围没有比它跟高的地方山谷?不就是在这个高度周围没有比它更矮的地方因此我们只需要用\(DFS\)遍历遇到的所......
  • U208362 分为互质组
    U208362分为互质组题目与P10483小猫爬山相识只需要将判断条件改为是否互质即可小猫爬山题解代码:#include<bits/stdc++.h>usingnamespacestd;inta[100];vector<int>sum[100];intn,w;boolb[100];intans=INT_MAX;intisrp(inta,intb){ if(b==0){ returna......
  • 国自然青年项目|基于多模态影像组学的乳腺癌分子分型预测研究|基金申请·25-01-20
    小罗碎碎念今天和大家分享一份国自然青年项目,项目执行期为2021-2023年,直接费用为24万。项目聚焦乳腺癌分子分型预测,综合运用多模态组学数据、影像组学技术和深度学习技术。研究内容包括跨模态医学图像分割、多模态特征提取与融合、模型设计与系统研发。通过提出一系......
  • 对多组学多模态方向感兴趣的医工交叉科研人员,这三篇综述值得参考!|顶刊速递·25-01-20
    小罗碎碎念推文速览第一篇文章围绕高分辨率空间转录组学展开,介绍其技术原理、在构建组织图谱等多方面的应用、临床研究设计要点,分析临床转化面临的挑战,展望未来发展,强调其对揭示疾病机制和推动个性化医疗的重要意义。第二篇文章围绕局部晚期直肠癌的全新辅助治疗(TNT)展......