qbxt 提高精英班 Day 1下午考试 题解

本文分享了一场比赛的心得体会,并详细解析了几道算法题的解题思路,包括暴力求解、贪心算法及动态规划等,同时反思了读题的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

T1

模拟题,没什么可以说的。。。 直接暴力找就可以。。。唯一A掉的题 但是std写的比我少很多。。。 ``` #include #include #include #include #include #define For(i,l,r) for(int i=l;i<=r;++i) using namespace std; int wpcnt,wgcnt,t1,t2; unsigned short int mapp[4][4],apr[27]; bool winp[27],wing[27][27]; //先看两条对角线,然后看列、行 void clr() { memset(apr,0,sizeof apr); } void judge1(int x,int y)//个人获胜 { //cout<

T2

一个贪心题目,想法比较简单,显然我们需要把更多的时间留给高处的ci大的景点,sort一遍然后递推来做就可以 但是

一定要开long long

我想省一下空间结果弄巧成拙丢了50分- - (不然就不用去买耳机了,真让人难过)
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdio>
#define For(i,l,r) for(int i=l;i<=r;++i)
using namespace std;
inline long long int read()
{
	char c;
	bool t=0;
	long long int a=0;
	while((c=getchar())==' '||c=='\n'||c=='\r');
	if(c=='-')
	{
		t=1;
		c=getchar();
	}
	while(isdigit(c))
	{
		a*=10;
		a+=(c-'0');
		c=getchar();
	}
	return a*(t?-1:1);
}
struct point{
	long long int x,c;
}jd[100001];
bool cmp(point a,point b)
{
	return a.c>b.c?1:0;
}
long long int l,n,va,vb,temp;
long long ans;
int main()
{
	freopen("max.in","r",stdin);
	freopen("max.out","w",stdout);
	long long int nowh=0,preh=0;
	l=read();
	n=read();
	va=read();
	vb=read();
	temp=va-vb;
	For(i,1,n)
	{
		jd[i].x=read();
		jd[i].c=read();
	}
	sort(jd+1,jd+n+1,cmp);
	For(i,1,n)
	{
		if(nowh<jd[i].x)
		{
			preh=nowh;
			nowh=jd[i].x;
			ans+=(temp*(nowh-preh)*jd[i].c);
		}
	}
	printf("%lld",ans);
	return 0;
}

T3

一个比较难的动态规划题 但是考试的时候居然理解成重叠部分了。。。然后就看了两个小时,不然怎么也能拿30分搜索分。。。 以后还是要认真读题。。。

讲个思路吧。。。
先按左端点排序
既然是并集,那么我们就一定不会选那些被其他线段包含掉的小线段,所以我们先把那些被包含掉的线段都删掉,代码实现玄学
然后我们以线段序号数和用了的线段数为状态来dp
dp[i][k]=dp[j][k-1]+____________________
去掉后剩下的线段就是这种情况
样例图片
这样看有两种情况
一种是一条和另一条有交集,另一种就是没有交集
①对于像(2,3)这种有重叠部分的线段,我们的状态转移方程是
dp[i][k]=dp[j][k-1]+r[i]-r[j]
②对于(1,3)这种没有重叠的,我们的状态转移方程是
dp[i][k]=dp[j][k-1]+r[i]-l[i]
显然,对于确定的i,k,r[i] 和 l[i]是不会变的,我们要做的只是找出
dp[j][k-1]和dp[j][k-1]-r[j]的最大值
可以预处理出最大值,然后直接调用
暴力不预处理的话单次寻找是O(n),全部状态O(nk)
所以复杂度是O(k n^2)
优化一下可以做到O(k n log n)
然后说可以用单调队列来优化。。。但是没有讲。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值