HDU 1081 To The Max 二维dp

来源:互联网 发布:js数组添加数据 编辑:程序博客网 时间:2024/06/04 17:54

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1081

 

题意:求一个二维矩阵的最大子矩阵的和

将二维压缩成一维来做

 

代码如下:

#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <vector>#include <set>#include <map>#include <queue>#include <stack>using namespace std;/*freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);*/#define INF 0x7f7f7f7fint d[101][101];int s[101];int main(){    int n,i,j,k;    while(cin>>n)    {        for(i=1;i<=n;i++)            for(j=1;j<=n;j++)                scanf("%d",&d[i][j]);        int max=-INF;        for(i=1;i<=n;i++)        {            memset(s,0,sizeof(s));            for(j=i;j<=n;j++)//这里将二维压缩成一维的            {                int temp=0;//当前最大值                for(k=1;k<=n;k++)                {                    s[k]+=d[j][k];                    if(temp<=0)//如果当前最大值小于等于0,重置                        temp=s[k];                    else//如果当前最大值大于0,直接加                        temp+=s[k];                    if(temp>max)                        max=temp;                }            }        }        printf("%d\n",max);    }    return 520;}


 

原创粉丝点击