首页 > 其他分享 >CF1716E 某种神秘矩阵做法

CF1716E 某种神秘矩阵做法

时间:2024-04-30 15:44:39浏览次数:17  
标签:神秘 const matrix LL 矩阵 long vector CF1716E

闲话

我和 @AcaCaca_ duel,然后我写了如下的神奇做法,然后 vector 疯狂 CE,爆了。

为什么没人像我这样做啊喂!看来还是我太菜了

题解

首先众所周知的,序列最大子段和可以用 \(\max +\) 矩阵来做。

考虑一个翻转,其实就是在从下往上递归中某一层所有相邻的两个矩阵进行了交换,换句话说,从左乘右变成了右乘左。

从下往上第 \(i\) 层有 \(2^{i-1}\) 种状态,\(2^{n-i+1}\) 个矩阵,所以时空复杂度都是 \(O(n2^n)\) 的。

屎山代码。

#include<bits/stdc++.h>
using namespace std;
#define LL long long
struct matrix{
	LL a[3][3];
};
matrix operator*(const matrix &x,const matrix &y){
	matrix z;
	memset(z.a,-0x7f,sizeof(z.a));
	for(LL i=0;i<=2;i++){
		for(LL j=0;j<=2;j++)
		  for(LL k=0;k<=2;k++)
		   z.a[i][j]=max(z.a[i][j],x.a[i][k]+y.a[k][j]);
	}
	return z;
}
LL n,i,j,k,m,x;
LL stat=0;
LL b[500005];
const LL inf=0x7fffffffffff;
vector<vector<matrix> > v[19];
vector<matrix> v1;
int main(){
	scanf("%lld",&n);
	for(i=0;i<(1<<n);i++){
		scanf("%lld",&b[i]);
	}
	for(i=0;i<(1<<n);i++){
		matrix tmp;
		tmp.a[0][0]=0,tmp.a[0][1]=b[i],tmp.a[0][2]=b[i],tmp.a[1][0]=-inf,tmp.a[1][1]=b[i],tmp.a[1][2]=b[i],tmp.a[2][0]=-inf,tmp.a[2][1]=-inf,tmp.a[2][2]=0;
		v1.push_back(tmp);
	} 
	v[0].push_back(v1);
	for(i=1;i<=n;i++){
		for(j=0;j<(1<<i);j++){
			v1.clear();
			if((j&(1<<(i-1)))>0){
				for(k=0;k<(1<<(n-i));k++){
					v1.push_back(v[i-1][j^(1<<(i-1))][k*2+1]*v[i-1][j^(1<<(i-1))][k*2]);
				}
				v[i].push_back(v1);
			}
			else{
				for(k=0;k<(1<<(n-i));k++)
				  v1.push_back(v[i-1][j][k*2]*v[i-1][j][k*2+1]);
				v[i].push_back(v1);
			}
		}
	}
	scanf("%lld",&m);
	for(i=1;i<=m;i++){
		scanf("%lld",&x);
		stat^=(1<<x);
		printf("%lld\n",max(0ll,max(v[n][stat][0].a[0][1],v[n][stat][0].a[0][2])));
	}
	return 0;
}

标签:神秘,const,matrix,LL,矩阵,long,vector,CF1716E
From: https://www.cnblogs.com/monster-hunter/p/18168137

相关文章

  • 化腐朽为神奇!揭开ISP图像处理的神秘面纱,基于瑞芯微RK3568J工业平台!
    ISP图像处理前后图像对比化腐朽为神奇!经过ISP图像处理的图片前后对比是如此惊人!从下图中可以观察到,未经处理的原始图像偏绿且暗淡,而经ISP图像处理的图像能够清晰地还原现场真实的颜色细节! 图1 原始图像显示效果 图2 经ISP图像处理后显示效果  ISP说明......
  • 矩阵
    矩阵顾名思义就是一个小破方阵类似这样0011010101110000这就是一个四行四列的矩阵,矩阵包含三个信息,长度,宽度,数值数值就是矩阵里每一位上的数值,通常用一个数值来存为了方便使用我们常写成结构体形式定义structMat{ intl,r;//长,宽 int......
  • 力扣-566. 重塑矩阵
    1.题目题目地址(566.重塑矩阵-力扣(LeetCode))https://leetcode.cn/problems/reshape-the-matrix/题目描述在MATLAB中,有一个非常有用的函数reshape,它可以将一个 mxn矩阵重塑为另一个大小不同(rxc)的新矩阵,但保留其原始数据。给你一个由二维数组mat表示的 mxn......
  • 矩阵转置 O(1)
    矩阵转置链接为:https://www.acwing.com/problem/content/3595/使用了辅助空间的:#include<iostream>usingnamespacestd;constintN=110;inta[N][N];intb[N][N];intmain(){intn;cin>>n;for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)......
  • 力扣-59. 螺旋矩阵 II
    1.题目题目地址(59.螺旋矩阵II-力扣(LeetCode))https://leetcode.cn/problems/spiral-matrix-ii/题目描述给你一个正整数 n,生成一个包含1到 n2 所有元素,且元素按顺时针顺序螺旋排列的 nxn正方形矩阵matrix。 示例1:输入:n=3输出:[[1,2,3],[8,9,4],[7,6,5]......
  • Games 101: 旋转矩阵
    旋转矩阵本文主要介绍了旋转矩阵的推导,分为两种方式:旋转坐标旋转坐标轴以下坐标系都是右手坐标系旋转坐标已知坐标点\(A(x_a,y_a)\),旋转\(\theta\)角后变为坐标点\(B(x_b,y_b)\),求解旋转矩阵.\[{\large\begin{align*}\begin{split}x_a&=r_a\cdotcos(\alpha)=......
  • 力扣-54. 螺旋矩阵
    1.题目题目地址(54.螺旋矩阵-力扣(LeetCode))https://leetcode.cn/problems/spiral-matrix/题目描述给你一个m行n列的矩阵 matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:......
  • 矩阵快速幂
    1.参考参考:【矩阵快速幂】简单题学「矩阵快速幂」2.定义2.1定义如果直接求取M^n,时间复杂度是O(n),可以定义矩阵乘法,然后用快速幂算法来加速这里M^n的求取,简化时间复杂度为O(logn)主体思路就是不求M^n而是求M^(n/2),然后先不求M^(n/2),先求M^(n/4)具体实现同......
  • 【刚度矩阵推导】2d frame 单元
    2dframe单元是x-y平面上的单元,每个节点上有2个平移自由度的和一个转动自由度.局部坐标系下,单元位移向量为:\(u=[u_1,u_2,u_3,u_4,u_5,u_6]^{T}\)其局部坐标系下的刚度矩阵可以由2dtruss单元和2dbornoulli-beam单元的刚度矩阵组合而成.使用matlab进行推导:%!b......
  • 【知识点】快速幂与矩阵快速幂
    什么是快速幂,为什么要使用快速幂?Macw:快速幂有好多好处。Penelope:例如?Macw:它比较快。见名知意,快速幂算法可以在非常短的时间内求出一个数的\(n\)次幂。虽然快速幂在初学阶段的应用不算太多,但是快速幂背后的思想是非常值得我们去理解的。举例而言,如果我们要求出\(3^......