golang 多维数组
golang 代码如下:
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
里头定义二维数组未有啥复杂的,在赋值的进程中大家需求先定义多个风华正茂维数组 carray := make([]int, column, column),然后在赋值给外部的数组 array[i] =carray
Sample Output
15
难题自个儿起步用暴力法来解答,可是,通可是,超时,后来参照他事他说加以考察了须臾间别人的观念吗!没悟出那道题还足以用动归的情势解答,很震惊啊!
代码如下:
[cpp]
//这一个程序能够求出m*n的矩阵某一块的最大值
//这种寻找算法对的误!可是超时,由此还要更上一层楼优化算法!
//那道题的题意说的可比模糊,标题里不曾说要多个测量检验数据,弄得作者只管理了一回,引致老是不对,又找不到难点所在!
/*
#include<iostream>
#include<cstdio>
using namespace std;
const int MAX=10010;
int arr[MAX];
int main()
{
int s,max=-200;
int we=0;
int m,n;
while(scanf("%d",&arr[0])!=EOF)
{
//cin>>arr[0];//输入方阵的维数
m=n=arr[0];
for(int i=1;i<=arr[0]*arr[0];i )
cin>>arr[i];
for(int i=1;i<=m;i )
for(int j=1;j<=n;j )//这里是意味着块数的大小,i*j
for(int p=1;m-p>=i-1 ;p )
for(int q=1;n-q>=j-1
;q )//寻觅路径,自上而下,自左向右
{
int cur=p m*(q-1);
int count=0;
int temp=cur;
int temp1=1;
s=0;
//cout<<"第"<<we<<"次搜索:
"<<endl;
//cout<<"起点是
行数"<<p<<","<<"列数"<<q<<endl;
//cout<<"p="<<p<<",n="<<n<<endl;
for(int k=1;k<=i*j;k )
{
//cout<<arr[temp]<<" ";
s=s arr[temp];
count ;
temp ;
if(count>=i)
{
temp=cur temp1*m;
temp1 ;
count=0;
}
}
//cout<<endl;
//we ;
if(s>max)
max=s;
}
cout<<max<<endl;
//system("pause");
}
return 0;
}
*/
#include<iostream>
#include<cstdio>
using namespace std;
int arr[101][101];
int sum[101],dp[101];
int main()
{
int i,j,k,p,n;
while(scanf("%d",&n)!=EOF)
{
int max=-200;
memset(sum,0,sizeof(sum));
memset(dp,0,sizeof(dp));
for(i=0;i<n;i )
for(j=0;j<n;j )
cin>>arr[i][j];
//很难想到,那以致是意气风发道动态规划题
//1、最大子字段和
/*
标题能够转变为八个子难点:
1,给定n个整数(大概为负数卡塔尔国组成的体系a[1],a[2],a[3],…,a[n],求该种类如a a … a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所求的最优值为马克斯{0,a a … a[j]},1<=i<=j<=n
我们把b[j]明亮为早先方某项起始包罗a[j](a[j]为终极一个要素卡塔尔的连年的段的和最大值,易知,开端的a[i]自然为正数!
记b[j]=max(a .. a[j-1] a[j]),个中1<=i<=j,并且1<=j<=n,须求了解的一点是b[j]的值必需带有a[j]。则所求的最大子段和为max{b[j]},1<=j<=n。
由b[j]的定义可易知,当b[j-1]>0时(即近年来的段加上a[j]那生机勃勃段值会越来越大,自然把a[j]那黄金年代段接上)b[j]=b[j-1] a[j],不然(由于前面包车型大巴段为负值,加上a[j],会使值变小,那样的话,我们将前方的段去掉,a[j]便是最大值卡塔 尔(英语:State of Qatar)b[j]=a[j]。故b[j]的动态规划递归式为
b[j]=max(b[j-1] a[j],a[j]),1<=j<=n。
2、最大子矩阵和
矩阵是二维的,将其压缩成大器晚成维就能够用地方的艺术求出最大子矩阵和了
将要风流倜傥百年不遇的数相加,压缩成豆蔻梢头维的就可以,我们遍历全数的减少恐怕,就可以因而地点的主意,求出最大值!
*/
for(i=0;i<n;i )
{
memset(sum,0,sizeof(sum));
for(k=i;k<n;k )
{
for(j=0;j<n;j )
sum[j]=arr[k][j] sum[j];
dp[0]=sum[0];
for(p=1;p<n;p )
{
if (dp[p-1]>0)
dp[p]=dp[p-1] sum[p];
else dp[p]=sum[p];
if (dp[p]>max) max=dp[p];
/*
if(dp[p-1] sum[p]>sum[p])
dp[p]=dp[p-1] sum[p];
else
dp[p]=dp[p-1];
if(dp[p]>max) max=dp[p];
*/
}
}
}
cout<<max<<endl;
//system("pause");
}
return 0;
}
再有正是一些数值和字符的竞相转换用到了包strconv
Sample Input
4
0 -2 -7 0 9 2 -6 2
-4 1 -4 1 -1
8 0 -2
package main
import "fmt"
import "strconv"
import "bytes"
func main() {
var row,column int
fmt.Scanln(&row,&column)
var array = make([][]int,row,row)
for i:=0;i<row;i {
carray := make([]int, column, column)
for j:=0;j<column;j {
var columnValue string
fmt.Scan(&columnValue)
//fmt.Println(columnValue)
intv,_:= strconv.Atoi(columnValue)
carray[j] = intv
}
array[i] =carray
}
//fmt.Println(array)
var buffer bytes.Buffer
for i:=0;i<column;i {
buffer.Reset()
for j:=0;j<row;j {
buffer.WriteString(strconv.Itoa(array[j][i]) " ")
}
fmt.Println(buffer.String())
}
}
As an example, the maximal sub-rectangle of the array:
Problem Description
Given a two-dimensional array of positive and negative integers, a
sub-rectangle is any contiguous sub-array of size 1 x 1 or greater
located within the whole array. The sum of a rectangle is the sum of all
the elements in that rectangle. In this problem the sub-rectangle with
the largest sum is referred to as the maximal sub-rectangle.
Consider following 2D array, which is of the size 3×53×5. For an array of size N×MN×M, the rows and columns are numbered from 00 to N−1N−1 and columns are numbered from 00 to M−1M−1, respectively. Any element of the array can be accessed by arr[i][j]arr[i][j] where 0≤i<N0≤i<N and 0≤j<M0≤j<M. For example, in the following array, the value stored at arr[1][3]arr[1][3] is 1414.
Output
Output the sum of the maximal sub-rectangle.
A multi-dimensional array is an array of arrays. 2-dimensional arrays are the most commonly used. They are used to store data in a tabular manner.
To The Max
下来就是字符串拼接和别的的语言不太相通,先定义三个var buffer bytes.Buffer, 然后写数据buffer.WriteString("ddd"卡塔 尔(阿拉伯语:قطر,最终就是出口 buffer.String()
9 2
-4 1
-1 8
现实的主题材料如下:(就是将多维数组的队列交换卡塔 尔(英语:State of Qatar)
Input
The input consists of an N x N array of integers. The input begins with
a single positive integer N on a line by itself, indicating the size of
the square two-dimensional array. This is followed by N 2 integers
separated by whitespace (spaces and newlines). These are the N 2
integers of the array, presented in row-major order. That is, all
numbers in the first row, left to right, then all numbers in the second
row, left to right, etc. N may be as large as 100. The numbers in the
array will be in the range [-127,127].
is in the lower left corner:
and has a sum of 15.
本文由时时app平台注册网站发布于编程知识,转载请注明出处:golang 多维数组
关键词: