crf 的视察
最大正方形那个题,枚举一个起点,二分出最大的正方形的边
n^2logn的复杂度,也可以dp,i,j只能由i-1,j,i,j-1,i-1,j-1,转移过来,取最小值就行了
#include<cstdio>
#include<iostream>
using namespace std;
int n,m;int s[2009][2001],a[2001][2001],ans;
int check(int i,int j,int k){
int w=s[i+k-1][j+k-1]-s[i+k-1][j-1]-s[i-1][j+k-1]+s[i-1][j-1];
if(w==k*k) return 1;
return 0;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
int l=1,r=min(n-i,m-j)+1;
while(l<=r)
{
int mid=(l+r)>>1;
int w=check(i,j,mid);
if(w) l=mid+1;
else r=mid-1;
}
ans=max(l-1,ans);
}
printf("%d",ans);
}
crf 的军训
贪心
按左边排序,对右面贪心,放书,取最小值,如果不够了就加书
代码流失,有时间补上。。。
crf的数数
完全蒙蔽。。。。