比赛 |
2024.5.23练习赛 |
评测结果 |
WWAWW |
题目名称 |
不重叠正方形 |
最终得分 |
20 |
用户昵称 |
郑霁桓 |
运行时间 |
0.667 s |
代码语言 |
C++ |
内存使用 |
35.41 MiB |
提交时间 |
2024-05-23 21:12:13 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[1005][1005],b[1005][1005],s,nmp,as;
struct nm{
long long v,x,y;
}c[1005*1005];
bool cp(nm x,nm y){
return x.v>y.v;
}
bool dfs(long long a1,long long a2,long long s,long long pp){
for(int i=pp;i<=nmp;i++){
if(a1==0){
if(dfs(i,0,c[i].v,i+1)){
return true;
}
}
if(a2==0){
if(abs(c[i].x-c[a1].x)<m&&abs(c[i].y-c[a1].y)<m){
continue;
}
if(dfs(a1,i,s+c[i].v,i+1)){
return true;
}
}else{
if(abs(c[i].x-c[a1].x)<m&&abs(c[i].y-c[a1].y)<m){
continue;
}
if(abs(c[i].x-c[a2].x)<m&&abs(c[i].y-c[a2].y)<m){
continue;
}
as=s+c[i].v;
return true;
}
}
}
int main(){
freopen("zfx.in","r",stdin);
freopen("zfx.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%lld",&a[i][j]);
b[i][j]=b[i][j-1]+b[i-1][j]-b[i-1][j-1]+a[i][j];
}
}
for(int i=m,k=1;i<=n;i++){
for(int j=m;j<=n;j++,k++,nmp++){
c[k].v=b[i][j]-b[i][j-m]-b[i-m][j]+b[i-m][j-m];
c[k].x=i;
c[k].y=j;
}
}
sort(c+1,c+nmp+1,cp);
dfs(0,0,0,1);
cout<<as;
return 0;
}