Pagini recente » Cod sursa (job #1084628) | Cod sursa (job #852290) | Cod sursa (job #973848) | Cod sursa (job #1264484)
#include <iostream>
#define inf 1000005
using namespace std;
int n,m;
bool mat[155][18];
int din[155][18][32805];
inline int set(int k,int bit,bool val){
return ((k&(~(1<<bit)))|(val<<bit));
}
int main()
{
int k=0;
cin>>n>>m>>k;
int a,b;
while(k--){
cin>>a>>b;
mat[a][b]=1;
}
int i,j;
for(i=0;i<=n;i++)
for(j=1;j<=m;j++)
for(k=0;k<(1<<m);k++)
din[i][j][k]=-inf;
din[0][m][(1<<m)-1]=0;
int nlin;
int ncol;
for(i=0;i<=n;i++)
for(j=1;j<=m;j++)
for(k=0;k<(1<<m);k++)
if(din[i][j][k]!=-inf){
nlin=(i+(j==m));
ncol=((j==m)?1:(j+1));
din[nlin][ncol][set(k,ncol-1,mat[i][j])]=max(din[nlin][ncol][set(k,ncol-1,mat[i][j])],din[i][j][k]);
if(j!=(m-1)){
nlin=(i+(j==m));
ncol=((j==m)?2:(j+2));
if(!mat[nlin][ncol] && !mat[nlin][ncol-1] && !(k&(1<<(ncol-1))) && !(k&(1<<(ncol-2))))
din[nlin][ncol][set(set(k,ncol-1,1),ncol-2,1)]=max(din[nlin][ncol][set(set(k,ncol-1,1),ncol-2,1)],din[i][j][k]+1);
}
}
int ans=0;
for(k=0;k<(1<<m);k++)
if(din[n][m][k]>ans)
ans=din[n][m][k];
cout<<ans<<'\n';
return 0;
}