首页 > 其他分享 >861. 翻转矩阵后的得分

861. 翻转矩阵后的得分

时间:2023-04-06 20:58:16浏览次数:44  
标签:861 矩阵 个数 grid 计算 贪心 翻转

题目描述

给了一个二维矩阵,矩阵的元素不是0就是1
你可以进行任意次操作,让某行或者某列进行翻转
元素的得分是每一行二进制的和
问怎么操作可以让总得分最大?

f1 贪心+计算增量

基本分析

  1. 为啥可以贪心?(1)对每行来说,首位肯定是1最好,遮掩某些行需要翻转,某些不翻;(2)对同一列来说,大家的优先级都是一样的,这样比就看当前1的个数多还是当前0的个数多
  2. 怎么计算结果?按照列来计算,每次计算当前位置对结果的贡献
  3. 有翻转的时候怎么考虑?没有翻转的时候直接计数,有的时候看grid[i][0]就能看出来,如果翻转,那么0或者1的个数是1 - grid[i][j]

代码

class Solution:
    def matrixScore(self, grid: List[List[int]]) -> int:
        m, n = len(grid), len(grid[0])
        ans =  m * (1 << (n - 1))

        for j in range(1, n):
            cnt = 0
            for i in range(m):
                if grid[i][0] == 1:
                    cnt += grid[i][j]
                else:
                    cnt += 1 - grid[i][j]
            cnt = max(cnt, m - cnt)
            ans += cnt * (1 << (n - 1 - j))
        
        return ans

总结

  1. 看出行和列贪心的逻辑
  2. 计算每一列的值的时候需要考虑这一行是不是进行了翻转
  3. 计算累加结果的时候不能忘了*每一列的1的个数,否则这一列只计算了一个

标签:861,矩阵,个数,grid,计算,贪心,翻转
From: https://www.cnblogs.com/zk-icewall/p/17294120.html

相关文章

  • 题目 1024: [编程入门]矩阵对角线求和
    求一个3×3矩阵对角线元素之和。 解题思路和注意事项: 这道题还是蛮简单,首先要求求一个矩阵的主副对角线的元素和,那肯定要用到的就是多维数组。        多维数组的形式应该为:array[i][j]; 知道这个后我们开始分析题目:        先是主对角线,就是从左上到......
  • 高Cache命中率的矩阵乘法
    #include<ctime>#include<iostream>usingnamespacestd;intmain(intargc,char**argv){intN=500;intA[N][N];intB[N][N];doubleC1[N][N];doubleC2[N][N];for(inti=0;i<N;i++){for(intj=0;j......
  • 使用benchmark比较循环嵌套与strassen求解矩阵乘法的性能
    #include<benchmark/benchmark.h>#include<iostream>#include<random>#include<vector>usingnamespacestd;staticconstintn=200;staticconstint_lrange=0;staticconstint_rrange=10;staticconstint_iter=1;us......
  • Codeforces Round 861 (Div. 2)
    Preface这场感觉都是一个礼拜前补题打的了,但由于上周末事情比较多都没来得及写题解因此可能题意都记得不是很清楚了,就简略地谈一谈吧A.LuckyNumbers不难想到直接暴力从左端点枚举到右端点并对每个数进行暴力判断一个很naive的结论就是当答案为\(9\)时直接输出即可,然后我们......
  • c++实现Matlab矩阵Matrix类(实矩阵Matrix、复矩阵CMatrix)
    全栈工程师开发手册(作者:栾鹏)matlab2c动态链接库下载matlab库函数大全matlab2c基础教程matlab2c开发全解教程开发注意事项:1、目前matlab2c对矩阵的实现仅包含实数型、复数型数据。实数型矩阵使用Matrix定义,复数型矩阵使用CMatrix定义。2、实数矩阵元素int、float元素类型会自动......
  • 匹配矩阵
    a<-matrix(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15),nrow=3,ncol=5)c<-matrix(c(2,3,3,3,3,4,4,4,4,8,8,8),nrow=3,ncol=4)rownames(a)<-c("aa","cc","kk")rownames(c)<-c("dd","cc","ee")&......
  • 25. K 个一组翻转链表
    25.K个一组翻转链表给你链表的头节点head,每 k 个节点一组进行翻转,请你返回修改后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。......
  • Maze 第二十届浙大城市学院程序设计竞赛 (二分图,网络流(对于表格,矩阵是如何建边的))
    题目大意:给出一个01矩阵,给出q,p分别表示选一个点的权值,和选2个连在一起的点的权值问如何让权值更大 注意:在Dinic的时间复杂度对于二分图这种边权为1,时间复杂度为NsqrtN, 不是n^2m  思路:更具题目的条件限制,他的建边一定是2个矮在一起的因此更具(i......
  • 【SciPy】Sparse稀疏矩阵主要存储格式总结(转载)
    原文:【SciPy】Sparse稀疏矩阵主要存储格式总结在数据科学和深度学习等领域常会采用矩阵格式来存储数据,但当矩阵较为庞大且非零元素较少时,运算效率和存储有效率并不高。所以,通常我们采用Sparse稀疏矩阵的方式来存储矩阵,提高存储和运算效率。下面将对SciPy中七种常见的存储方式(COO/......
  • 1594. 矩阵的最大非负积
    题目描述给了一个矩阵grid,里面的数字有正有负问从左上角到右下角的最大乘积?f1-dp基本分析这里有正又负会有啥问题?可能最小的负*负数会产生最大的正数,所以需要维护两个值,最大的路径积和最小的路径积怎么进行转移?只能从左边或者上面转移来,需要对grid[i][j]的值按照正负分类讨......