首页 > 其他分享 >codeforces 1209E1 Rotate Columns (easy version)

codeforces 1209E1 Rotate Columns (easy version)

时间:2024-07-28 16:08:04浏览次数:10  
标签:LF Rotate int 最大值 codeforces back version ans mx

codeforces 1209E1 Rotate Columns (easy version)

题目传送门:codeforccesluogu

思路

贪心,暴力搜索

贪心

对于所有列,只有列中最大值在所有列的最大值中前 \(n\) 大才可能对答案有贡献。
证明:若有非前 \(n\) 大的列对某行最大值产生了贡献,则用没有被取的前 \(n\) 大的列代替该行一定更优。所以只有列中最大值在所有列的最大值中前 \(n\) 大才可能对答案有贡献。

暴力搜索

将所有列按列的最大值从大到小排序。根据贪心,答案一定由前 \(n\) 列产生,而 \(n \leq 4\) ,所以直接爆搜就行了。

细节

更新的时候要先保存,不然回溯会出错。

代码

单次时间复杂度\(O(n^{2 \times n - 2})\)

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

const int N = 6, M = 105;

#define LF(i, __l, __r) for (int i = __l; i <= __r; i++)
#define RF(i, __r, __l) for (int i = __r; i >= __l; i--)

struct col { int a[N], mx; } a[M];
int t, n, m, ans, mx[N];
int back[N][N][N];

bool cmp(col a, col b) { return a.mx > b.mx; }

void Init() {
    ans = 0;
    memset(mx, 0, sizeof(mx));
    memset(back, 0, sizeof(back));
    memset(a, 0, sizeof(a));
}

void dfs(int u) {
    if (u == n + 2) {
        int res = 0;
        LF(i, 1, n) res += mx[i];
        ans = max(ans, res);
        return;
    }

    LF(i, 0, n - 1) {
        LF(j, 1, n) {
            int s = i + j;
            if (s > n) s %= n;
            back[u][i][s] = mx[s];
            mx[s] = max(mx[s], a[u].a[j]);
        }
        dfs(u + 1);
        LF(j, 1, n) mx[j] = back[u][i][j];
    }
}

int main() {
    scanf("%d", &t);

    while (t--) {
        Init();
        scanf("%d%d", &n, &m);
        LF(i, 1, n) LF(j, 1, m) {
            scanf("%d", &a[j].a[i]);
            a[j].mx = max(a[j].mx, a[j].a[i]);
        }

        sort(a + 1, a + m + 1, cmp);
        
        dfs(1);
        printf("%d\n", ans);
    }
    return 0;
}

标签:LF,Rotate,int,最大值,codeforces,back,version,ans,mx
From: https://www.cnblogs.com/faruzan/p/18328329

相关文章

  • Codeforces Round 962 (Div. 3) 题解 A-F
    A.LegsProblem-A-Codeforces1.1翻译农夫约翰的农场又迎来了美好的一天。农夫约翰来到农场后,数了数n条腿。众所周知,农场里只住着鸡和牛,一只鸡有2条腿,而一头牛有4条腿。假设约翰农场主数清了所有动物的腿,那么他的农场里最少有多少动物?1.2思路求最少有几只动物......
  • Codeforces Round 962 (Div. 3)
    题目链接:CodeforcesRound962(Div.3)总结:ABC秒过,D有点难评了,E优化很妙。A.Legstag:签到voidsolve(){cin>>n;inta=n/4,b=n%4;a+=b/2;cout<<a<<endl;}B.Scaletag:模拟voidsolve(){cin>>n>>k;......
  • CodeForces 1883E Look Back
    题目链接:CodeForces1883E【LookBack】思路    若直接对每个元素进行操作累乘至大于相邻的前一个元素时,可能最后会数据溢出,而且乘的2个数可能会很多,会时间超限。所以可以对每两个相邻的元素进行判断,判断他们之间差了2的多少次方。cnt记录的是当前元素和上个元素之间差......
  • CodeForces 1883D In Love
    题目链接:CodeForces1883D【InLove】思路    求能否找出两个区间不相交,所以将得到的区间先按区间左端点的大小从小到大排列,再按区间右端点的大小从小到大排列,此时取出最小的右端点和最大的左端点,若右端点在左端点左侧,则存在两个不相交的区间。由于需要动态操作增加减......
  • CodeForces 1883C Raspberries
    题目链接:CodeForces1883C【Raspberries】思路    依次枚举,特判k=4的情况,因为k=4可以由2个2拼凑起来,这2个2可以不在同一个元素上,如K=4时,数组a可以为2,3,2,5,7,9,此时数组中所有的元素乘积可以被4整除。若k=4时,此时数组中元素没有可以拆分出2的情况时,所有的......
  • Codeforces Round 962 (Div. 3) A - D详细题解(思路加代码Python,C++(垃圾灰名小白想
             吐槽一下,这次比赛不知道怎么的,可能是div3参加的人比较多吗,代码题解上去后全是inqueue,比赛的过程中我还看了提交的,80多页几千个提交全是inqueue,我的代码等了**半个多小时才运行,然后发现timelimit真的有点搞心态,思路在下一题我还要反过来去优化上一题,不过......
  • has been injected into other beans [fundAdjuApplyService] in its raw version as
    场景:启动项目失败,报错Errorcreatingbeanwithname'batchAdjuApplyService':Beanwithname'batchAdjuApplyService'hasbeeninjectedintootherbeans[fundAdjuApplyService]initsrawversionaspartofacircularreference,buthaseventu......
  • Codeforces Round 962 (Div. 3) CDE
    时间:2024-07-27C.Sort原题:C.Sort标签:前缀和题意给定字符串a,b定义\(sorted(a[l..r])\)表示将a的lr区间排序为有序有q次询问,每次给出区间l,r,要求通过操作使\(sorted(a[l..r])==sorted(b[l..r])\)操作为将\(a_i\)变成需要的任意字符,求最少次数思路一开始由于是div3,尝......
  • Codeforces Round 962(Div. 3)
    CodeforcesRound962(Div.3)A.legs题解:简单的贪心,可以对n预处理,将n除以2,此时可将动物视为1,则动物便是1条或两条腿,此时若是奇数才需要鸡,否则全部是牛便是最优解ShowCode#include<bits/stdc++.h>#defineANScout<<ans<<'\n'usingnamespacestd;voidsolve(){......
  • Codeforces Round 962(Div .3)
    CodeforcesRound962(Div.3)A.legs题解:简单的贪心,可以对n预处理,将n除以2,此时可将动物视为1,则动物便是1条或两条腿,此时若是奇数才需要鸡,否则全部是牛便是最优解ShowCode#include<bits/stdc++.h>#defineANScout<<ans<<'\n'usingnamespacestd;voidsolve(){......