矩阵元素相乘
来源:互联网 发布:plc通信 十六进制数据 编辑:程序博客网 时间:2024/05/21 10:18
题目描述
A[n,m]是一个n行m列的矩阵,a[i,j]表示A的第i行j列的元素,定义x[i,j]为A的第i行和第j列除了a[i,j]之外所有元素(共n+m-2个)的乘积,即x[i,j]=a[i,1]*a[i,2]*...*a[i,j-1]*...*a[i,m]*a[1,j]*a[2,j]...*a[i-1,j]*a[i+1,j]...*a[n,j],现输入非负整形的矩阵A[n,m],求MAX(x[i,j]),即所有的x[i,j]中的最大值。
IDEA
第一想法就是用除法,行的积除以该数*列的积除以该数,单数但是会出现除0异常
第二想法就是对每个数按题目给定的方法计算,但是复杂度为三层循环
第三想法,用动态规划,两个规划矩阵,分别存储除该数以为的行积,列积。开始遍历存的数是从是开是该数之前的积,后一次倒序遍历乘上该数之后的积。复杂度为n*m
CODE
#include <iostream>#include <vector>using namespace std;int main(){ int n,m; while(cin>>n>>m){ vector<vector<int> > vec(n,vector<int>(m,0));vector<vector<int> > p1(n,vector<int>(m,1));vector<vector<int> > p2(n,vector<int>(m,1)); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>vec[i][j]; if(j>0) p1[i][j]=p1[i][j-1]*vec[i][j-1]; if(i>0) p2[i][j]=p2[i-1][j]*vec[i-1][j]; }} int temp; for(int i=0;i<n;i++){ temp=1; for(int j=m-1;j>=0;j--){ p1[i][j]=p1[i][j]*temp; temp*=vec[i][j]; } } for(int i=0;i<m;i++){ temp=1; for(int j=n-1;j>=0;j--){ p2[j][i]=p2[j][i]*temp; temp*=vec[j][i]; } } int res=0; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ res=max(res,p1[i][j]*p2[i][j]);} } cout<<res<<endl; } return 0;}
0 0
- 搜狗 矩阵元素相乘
- 矩阵元素相乘
- 矩阵元素相乘
- 矩阵元素相乘
- 华为机试---矩阵元素相乘
- 牛客网---2016---搜狗矩阵元素相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- Web前端——CSS复习1(3.25)
- Android主题换肤 无缝切换
- 某定时任务系统的方案设计------软件系统设计能力很重要
- Netty学习(二)-Helloworld Netty
- jquery对象和DOM对象
- 矩阵元素相乘
- Android Gesture手势及手势库
- Android UI——menu菜单
- window和linux dir locate命令
- 计161_Problem T: 字母变成其下一字母
- Web入门——HTML代码编写规范
- eclipse ResourcePathLocationType Unable to load annotation processor factory 异常
- Python开发技术详解(原书+视频+源码)
- LeetCode Week 0