2024/12/28课堂记录

目录

  1. 最大连续和
  2. 木材加工(月度开销)
  3. 跳石头
  4. 作业:修剪草坪

复习一下

这次只写了朴素的dp版,注意,不要用贪心,因为单调队列只能优化dp

很简单,注释都不用写了

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

二分答案模版题
 #include<iostream>
using namespace std;
int a[100010];
int n,k,r=-1,l=1,ans=0;
bool half(int mid)
{
	int sum=0;
	for(int i=1;i<=n;i++)
	{
		int x=a[i];
		while(x>=mid)
		{
			x-=mid;
			sum++;
		}
	}
	if(sum>=k)return 1;
	else return 0;
}
int main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)r=max(r,a[i]);
	while(l<=r)
	{
//		cout<<"hhh";
		int mid=(l+r)/2;
		if(half(mid)==1)l=mid+1,ans=mid;
		else r=mid-1;
	}
	cout<<ans;
	return 0;
}

与平常二分不同,跳石头在函数内部通过其他方式来检验合理性

具体的也写注释了
 #include<iostream>
using namespace std;
long long int l,n,m,ans=0;
long long int a[50010];
bool half(long long int mid)
{
	long long int sum=0,now=0;//sum:可以去掉的石头总个数,now:现在跳到第几块石头上(下标 
	for(long long int i=1;i<=n+1;i++)
	{
		if(a[i]-a[now]<mid)sum++;//现在站的石头与面前的石头(可能已经移掉几块了)的距离 比预计距离小 
		else now=i;//距离比预计距离大 
	}
	if(sum<=m)return 1;
	else return 0;
}
int main()
{
	cin>>l>>n>>m;
	for(long long int i=1;i<=n;i++)cin>>a[i];
	long long int r=l;l=0;
	a[n+1]=r;
	while(l<=r)
	{
		long long int mid=(l+r)/2;
		if(half(mid)==1)ans=mid,l=mid+1;
		else r=mid-1;
	}
	cout<<ans;
	return 0;
}

金句摘抄:任何甜味回味起来都是苦的,因为回味意味着甜味早已消失殆尽

 

posted @   永韶  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)
点击右上角即可分享
微信分享提示