首页 > 其他分享 >题解:CF1209E1 Rotate Columns (easy version)

题解:CF1209E1 Rotate Columns (easy version)

时间:2024-08-09 19:54:52浏览次数:10  
标签:Rotate leq int 题解 CF1209E1 maxn mp sr 105

题目传送门

题意

给出一个 \(n\times m\) 的矩阵,我们可以对每一列进行循环位移,不限次数,最后求每一行的最大值之和。

\(1 \leq n \leq 4 , 1 \leq m \leq 100\)

思路

注意到 \(n\) 的范围很小,那么我们也可以缩小 \(m\) 的范围。

正确的方案显然是取整个矩阵的前 \(n\) 大值,并且将它们换到每一行。即便这 \(n\) 大值分布在不同的列,也一共只有 \(n\) 列,因此整个矩阵的有效范围只有 \(n \times n\)。

现在就可以随意的爆搜了,对于每一列,循环枚举位移的行数,最后统计答案即可,注意多测要清空。

代码

#include<bits/stdc++.h>
#define int long long 
#define inf 0x7f7f7f7f
using namespace std;
int lst[105][105][105],T,n,m;
int maxx[105],ans=-inf;
struct MRS{
	int sr[105],maxn;//sr存行 
	bool operator<(const MRS &x){return maxn>x.maxn;}
}mp[105];//存列 
bool cmp(int a,int b){return a>b;}
void dfs(int x){
	if(x>n){//搜索结束 
		int sum=0;
		for(int i=1;i<=n;i++)sum+=maxx[i];
		ans=max(ans,sum);
		return;
	}
	for(int i=0;i<=n-1;i++){
		for(int j=1;j<=n;j++){
			int tmp=((i+j)==n)?(i+j):(i+j)%n;//注意当下标等于n时不取余 
			lst[x][i][tmp]=maxx[tmp];//记录当前情况 
			maxx[tmp]=max(maxx[tmp],mp[x].sr[j]);//更新 
		}
		dfs(x+1);
		for(int j=1;j<=n;j++)maxx[j]=lst[x][i][j];//回溯 
	}
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>T;
	while(T--){
		ans=0;
		memset(mp,0,sizeof(mp));
		memset(lst,0,sizeof(lst));
		memset(maxx,0,sizeof(maxx));
		cin>>n>>m;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)cin>>mp[j].sr[i],mp[j].maxn=max(mp[j].maxn,mp[j].sr[i]);//存储每一列的的最大值,之后按此排序 
		sort(mp+1,mp+1+m);
		dfs(1);
		cout<<ans<<'\n';
	}
	return 0;
}

标签:Rotate,leq,int,题解,CF1209E1,maxn,mp,sr,105
From: https://www.cnblogs.com/MithrilSwordXIV/p/18351402

相关文章

  • CF1647F Madoka and Laziness 题解
    CF1647F给定排列\(p\),将其划分为两个单峰子序列,求两个单峰子序列的峰的组合的情况数。\(2\leqn\leq5\times10^5\)首先要注意到一个非常常见的地方:两个单峰子序列中的一个的峰值一定在整个排列\(p\)的最大值处这个非常显然,但并不注意到他的重要性,容易被忽视为......
  • 2024牛客暑期多校训练营8 I Haitang and Ranking 题解
    乱搞看到\(n=1e5\),时限3s,存在修改操作,很自然的想到根号分治。考虑按照时间分治。对每\(B\)个交换统一处理,\(B\)个交换最多有\(2B\)个元素改变状态,剩下都不变。那么只要对这\(2B\)元素内,暴力枚举,剩下的元素构建数据结构实现二维数点,平面内区间最值。因为\(a,b\)是不......
  • luogu题解:P10456 The Pilots Brothers' refrigerator【缺少 SPJ】
    思路此题题意酷似P10449.费解的开关。https://www.luogu.com.cn/problem/P10449不同之处便是状态连锁改变不同,但做法截然不同,此题是一个\(4\times4\)的矩阵。暴力枚举的复杂度是\(O(10^7)\),即\(2^{16}\times16\times16=16777216\),\(10^7\)的复杂度可以通......
  • P2901题解
    题目大意输出一张有向带权图前k短路的长度思路分析这是道k短路板子题我们可以用Astar算法来实现它OIwiki相关算法的网页简单来讲,Astar定义了一个估值函数f(x)=g(x)+h(x)g(x)表示由起点到达x点的路程(不一定是最短路),而h(x)则是终点到x点的最短路程这个估值函数可以预估从该......
  • Codeforces 165E Compatible Numbers 题解
    思路高维前缀和高维前缀和把数的二进制看成一个集合,二进制的每一位为\(1\)为全集\(V\)。根据题目描述,若两数\(a,b\)相容,则\(a\operatorname{and}b=0\),容易发现,\(b\in\complement_{V}a\),所以我们只需要用高维前缀和处理出\(\complement_{V}a\)的一个元素即可。......
  • ABC349D题解
    [ABC349D]DivideInterval题解传送门:luogu|atcoder题目简述给定非负整数\(l\)和\(r\)(\(l<r\)),令\(S(l,r)\)表示序列\((l,l+1,\ldots,r-2,r-1)\),其中包含从\(l\)到\(r-1\)的所有整数。此外,一个序列被称为“好序列”,当且仅当它可以表示为\(S(2^ij,2^{i}(j+1))\),......
  • AT_past202010_m 筆塗り 题解
    题目传送门前置知识线段树|树链剖分解法观察到要维护树上信息,且更改的呈链状,考虑进行树链剖分。将边权转化成点权,钦定边权给了深度更深的那个点,注意更新时不能更新\(\operatorname{LCA}\)。区间赋值和单点查询用线段树维护即可。代码#include<bits/stdc++.h>usingnam......
  • 如何避免自己问题解决缓慢导致项目周期延长
    在公司实习期间,我发现自己对业务的熟悉程度不足,导致在预期时间和实际完成时间上存在差异。虽然这种情况在后期有所改善,但前期的压力相对较大。为此,我总结了以下几点经验和改进措施:1.问题描述与现有分析我们今天的工作进展如何?当前诊断的调查进展如何?如果进展缓慢,是什么原因?需......
  • ABC349D题解
    [ABC349D]DivideInterval题解传送门:luogu|atcoder题目简述给定非负整数$l$和$r$($l<r$),令$S(l,r)$表示序列$(l,l+1,\ldots,r-2,r-1)$,其中包含从$l$到$r-1$的所有整数。此外,一个序列被称为“好序列”,当且仅当它可以表示为$S(2^ij,2^{i}(j+1))$,其中$i$和$j$......
  • # Cocos通过Electron打包web应用后,在触屏一体机设备触摸滑动无效问题解决
    Cocos通过Electron打包web应用后,在触屏一体机设备触摸滑动无效问题解决已经很晚了,刚刚解决这个问题,还是想记录一下,因为刚刚接触cocos没多久,这个问题困扰了我很久。背景接手了一个答题小游戏,由于涉及敏感信息就不在这里截图了,交接到我手里的是用cocos开发的,之前从来没有接触......