【考试】list1

一些复习总结

暴力好题

字符串匹配
微信步数
宝藏 ——搜索
回文 ——贪心+搜索
多叉堆 ——组合
Emiya家今天的饭

模拟好题

儒略日
网络连接
时间复杂度
表达式——栈

划分合并类dp

通过划分合并来维护一个单调不减的序列
贪心偶尔会出问题

P5665划分
signed main(){
	n=read(); type=read();
	for(int i=1;i<=n;i++){
		a[i]=read();
		s[i]=s[i-1]+a[i]; //前缀和
	}
	for(int i=1;i<=n;i++){
		int j;
		for(j=i-1; j>=0;j--) //寻找以i结尾的最优解
			if(s[i]-s[j]>=k[j]) break; //单调不减
		f[i]=f[j]+(s[i]-s[j])*(s[i]-s[j]);  //递推式 即所求的平方和
		k[i]=s[i]-s[j]; //更新以i结尾的最小划分和
	}
	printf("%lld",f[n]);
	return 0;
}
P2300合并神犇

同理 改一下递推式就行
f[i]=f[j]+i-j-1;
表示以j结尾的最少合并次数

P5666 树的重心

【树】【动态规划】关于树上的一些问题
暴力枚举删了每条边之后的子树的大小,并求重心,最后相加。大概有个40分

位运算

P2114 起床困难综合症

0在二进制表示中全是0, -1在二进制表示中全是1
利用这一性质可对一系列位运算操作之后的结果做预判

P5283异或粽子

求异或的前缀和
sum[j]^sum[i-1]
就是做一遍异或的逆运算,还是异或,注意不是减法
暴力位运算本题60
正解在下面

字典树Tie

P2580 于是他错误的点名开始了

水题 板子

最大异或对
void insert(int x){
	int p=0;
	for(int i=30;i>=0;i--){
		int u=x>>i&1;
		if(!son[p][u]) son[p][u]=++idx;
		p=son[p][u];
	}
}

int query(int x){
	int p=0, res=0;
	for(int i=30;i>=0;i--){
		int u=x>>i&1;
		if(son[p][!u]){
			p=son[p][!u];
			res+=1<<i;
		}
		else p=son[p][u];
	}
	return res;
}
异或粽子

就是求k对的最大异或对咯
1LL才是longlong
1不是longlong!!!
代码

最短路

P5563加工零件

由题意可知答案与奇偶性有关,因此将一个点看两个点,一个奇点,一个偶点。跑一遍spfa单源最短路,求出1号点到其他所有工人的距离,若到L%2同奇偶的点的最短路大于L,则无法到达。

最小生成树

P5687网格图

最小生成树板子 注意建图

DP

P7074方格取数

第三维状态储存从哪个方向过来的

dp[j][i][0]=max(dp[j][i-1][0],max(dp[j][i-1][1],dp[j-1][i][0]))+a[j][i];
dp[j][i][1]=max(dp[j][i-1][0],max(dp[j+1][i][1],dp[j][i-1][1]))+a[j][i];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值