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

如题,最大子矩阵和问题,问题描述可参见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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值