1つは、最大のフィールド合計----->最大のサブマトリックス合計
最大の連続するサブセグメントの合計。f [i]は、i番目の数字で終わる必要があることを意味します。つまり、この数字は必ず追加されるため、数字の前にパーツを追加するかどうかによって異なります。ゼロ以上を追加し、ゼロ未満を破棄します。古典的な動的プログラミングでは、単一の変数を使用してそれを実現しています。時間の複雑さO(n)。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if (nums.size()==0) return 0;
int former=0;
int ans=-0x3f3f3f3f;
for (int i=0;i<nums.size();++i)
{
if (former>0) former+=nums[i];//这边也就是说必须以nums[i]为结尾的最大价值。
else former=nums[i];
if (former>ans) ans=former;
}
return ans;
}
};
行列が与えられ、最大のサブ行列の合計を見つけ、アルゴリズムは複数の行を1行に圧縮し、行iから行jに列挙し(i <= j)、これらの行を1行に圧縮し、次にO(m)が最大のサブ行列を見つけるセグメントの合計、合計時間の複雑さはO(n * n * m)