【动态规划】 Vijos P1057 盖房子

来源:互联网 发布:ai软件是什么意思 编辑:程序博客网 时间:2024/04/27 23:54

关键就是那个状态转移方程,枚举正方形最右下角的坐标,取最大值即可。

为了节省内存,采取了两个一位数组来回颠倒的方法,其实也是因为直接开[1001][1001]的int数组总是返回runtime error。。。

题目连接:https://vijos.org/problems/P1057

#include<iostream>#include<algorithm>#include<string.h>#define MAX 1001using namespace std; int main(){    int n,m;    int goal=-1;    int area[2][MAX];    memset(area,0,sizeof(area));    bool field;    cin>>n>>m;    for(int i=0;i<n;i++){        for(int j=0;j<m;j++){            cin>>field;            if(field==false)                area[1][j]=0;            else if(i==0 || j==0)                area[1][j]=1;            else                area[1][j]=min(area[0][j-1],min(area[0][j],area[1][j-1]))+1;            goal=max(area[1][j],goal);                     }        for(int k=0;k<m;k++)            area[0][k]=area[1][k];    }    cout<<goal<<endl;    return 0;}


原创粉丝点击