poj 1050

来源:互联网 发布:java定义长整型 编辑:程序博客网 时间:2024/04/30 05:46

传送门http://poj.org/problem?id=1050

将2维的dp压成1维的

将数组每列的和放在一个数组temp中

用temp求最大连续子序列

#include<iostream>#include<cstdio>#include<cstring>#define maxn 105using namespace std;int a[maxn][maxn];int temp[maxn];int dp[maxn];int main(){    int max=-0x3fffffff;    int n;    cin>>n;    for(int i=1;i<=n;i++)        for(int j=1;j<=n;j++)            scanf("%d",&a[i][j]);    dp[1]=1;    for(int i=1;i<=n;i++)//从第几行    {        memset(temp,0,sizeof(temp));//注意清零        for(int j=i;j<=n;j++)//到第几行        {            for(int k=1;k<=n;k++)//第几列在temp里的第几个数字            temp[k]+=a[j][k];            int maxx=-0x3fffffff;            int x=temp[1];            for(int i=2;i<=n;i++)            {                if(x<0)                x=temp[i];//sum=0的不是最大子串                //最大子串第一个跟最后一个不是负的                else                x+=temp[i];                if(maxx<x)                maxx=x;//更新最大值            }            if(maxx>max)            max=maxx;        }    }    cout<<max<<endl;}


原创粉丝点击