最大子矩阵php,c++ - 最大子矩阵和代码问题-动态规划

本文探讨了最大子矩阵和问题的解决方案,作者分享了自己的代码实现,并特别指出代码中关于压缩子矩阵为一行的部分,即第22行的疑惑。标准答案与作者的实现存在差异,标准答案使用的是从i到N的循环,而作者使用的是从1到i的循环。作者寻求理解这一差异的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,最大子矩阵和问题,问题描述可参见POJ: http://poj.org/problem?id=1050

我想提问的具体问题是压缩子矩阵为一行的循环起点和循环终点,我自己写的完整代码如下:

int main(int argc, const char * argv[]) {

// insert code here...

// 最大子矩阵和问题

// first get all the numbers from the user

cout<

int N;

cin>>N;

int a[N][N];

for (int i=1; i<=N; i++) {

for (int j=1; j<=N; j++) {

cin>>a[i][j];

}

}

int SofArray=0;

// for rectangles that have 1,2,3...,N rows, do the addition for each column

for (int i=1; i<=N; i++) {

//create the target row

int targetRow[N];

for (int j=1; j<=N; j++) {

targetRow[j]=0;

for (int k=1; k<=i; k++) {

targetRow[j]+=a[k][j];

}

}

//now do the 最大子段和 solution

int S=0,b=0;

for (int j=1; j<=N; j++) {

if (b<0) {

b=targetRow[j];

}

else {

b+=targetRow[j];

}

if (b>=S) {

S=b;

}

}

// compare S and SofArray

if (S>=SofArray) {

SofArray=S;

}

}

// give back the info to the user

cout<

return 0;

}

(我是小白请勿嫌弃。。QAQ捂脸)

有一个地方跟标准答案不一样。。。就是压缩成一行那里(正文第22行)。。。我是for (int k=1;k<=i;k++),就是k从1到i嘛,因为这里有i行j列呀。。。可是标准答案是for (int k=i;k<=N;k++),也就是k是从i到N了。。。就想知道这是为啥。。。先谢过!乃们都是大好人!!QAQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值