记录编号 |
604793 |
评测结果 |
A |
题目名称 |
2515.[POJ 2044]天气预报 |
最终得分 |
100 |
用户昵称 |
左清源 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.173 s |
提交时间 |
2025-08-11 20:22:49 |
内存使用 |
151.19 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=370;
int f[N][5][5][9][9][9][9];
int n,a[N][5][5];
int fx[]={0,-1,0,1,0,-2,0,2,0},fy[]={0,0,1,0,-1,0,2,0,-2};
int check(int d,int i,int j){
return (a[d][i][j]|a[d][i+1][j]|a[d][i][j+1]|a[d][i+1][j+1]);
}
int dfs(int day,int x,int y,int f1,int f2,int f3,int f4){
if(f[day][x][y][f1][f2][f3][f4]!=-1)return f[day][x][y][f1][f2][f3][f4];
if(check(day,x,y)||f1>=7||f2>=7||f3>=7||f4>=7)return 0;
if(day==n)return 1;
int ans=0,g1,g2,g3,g4;
for(int k=0,xx,yy;k<9;k++){
xx=x+fx[k],yy=y+fy[k];
if(xx>=1&&xx<=3&&yy>=1&&yy<=3){
g1=(xx==1&&yy==1)?0:f1+1;
g2=(xx==1&&yy==3)?0:f2+1;
g3=(xx==3&&yy==1)?0:f3+1;
g4=(xx==3&&yy==3)?0:f4+1;
ans|=dfs(day+1,xx,yy,g1,g2,g3,g4);
}
}
return f[day][x][y][f1][f2][f3][f4]=ans;
}
void work(){
for(int d=1;d<=n;d++){
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
a[d][i][j]=0;
}
}
}
for(int d=1;d<=n;d++){
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
scanf("%d",&a[d][i][j]);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=4;j++){
for(int k=1;k<=4;k++){
for(int a=0;a<=7;a++){
for(int b=0;b<=7;b++){
for(int c=0;c<=7;c++){
for(int d=0;d<=7;d++){
f[i][j][k][a][b][c][d]=-1;
}
}
}
}
}
}
}
printf("%d\n",dfs(1,2,2,1,1,1,1));
}
int main(){
freopen("weather_forecast.in","r",stdin);
freopen("weather_forecast.out","w",stdout);
while(scanf("%d",&n)&&n)work();
return 0;
}