zoukankan      html  css  js  c++  java
  • 创意吃鱼法

    创意痴愚法

    矩阵dp

    开4个3000*3000会mle QAQ

    分两个方向左上到右下,右上到左下

    #include<bits/stdc++.h>
    using namespace std;
    int a[2700][2700],f[2700][2700],s1[2700][2700],s2[2700][2700];
    int read()
    {
    	int x=0;
    	char ch=getchar();
    	while(ch<'0'||ch>'9') ch=getchar();
    	while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    	return x;
    }
    int main()
    {
    	int n=read(),m=read();
    	for(int i=1;i<=n;i++)
    	for(int j=1;j<=m;j++)
    	a[i][j]=read();
    	int ans=0;
    	for(int i=1;i<=n;i++)
    	for(int j=1;j<=m;j++)
    	{
    		if(a[i][j]) 
    		{
    			f[i][j]=min(f[i-1][j-1],min(s1[i-1][j],s2[i][j-1]))+1;
    			ans=max(ans,f[i][j]);
    		}
    		else
    		{
    			s1[i][j]=s1[i-1][j]+1;
    			s2[i][j]=s2[i][j-1]+1;
    		}
    	}
    	memset(s1,0,sizeof(s1));
    	memset(s2,0,sizeof(s2));
    	for(int i=1;i<=n;i++)
    	for(int j=m;j>=1;j--)
    	{
    		if(a[i][j]) 
    		{
    			f[i][j]=min(f[i-1][j+1],min(s1[i-1][j],s2[i][j+1]))+1;
    			ans=max(ans,f[i][j]);
    		}
    		else
    		{
    			s1[i][j]=s1[i-1][j]+1;
    			s2[i][j]=s2[i][j+1]+1;
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    
  • 相关阅读:
    Web实现大文件分片上传的方法
    kinova环境配置
    c++ stl list
    echarts饼图
    js函数
    飞浆测试日志
    IfcRevolvedAreaSolidTapered
    matlab一元二次方程求根
    运行日志
    常用的sql
  • 原文地址:https://www.cnblogs.com/qwq-/p/13920136.html
Copyright © 2011-2022 走看看