#include<bits/stdc++.h>
using namespace std;
#define REP(i,n) for(int (i)=0;(i)<(n);(i)++) //repeat n times
#define REP2(i,s,n) for(int (i)=(s);(i)<(n);(i)++) //repeat from s to n
#define REPD(i,n) for(int (i)=(n);(i)>=0;(i)--) //repeat from n to 0
#define ASIZE(a) (sizeof(a) / sizeof(a[0])) //array size
#define SORTD(a) sort(a,a+ASIZE(a),greater<int>()) //sort in descending order for array
#define SORTA(a) sort(a,a+ASIZE(a)) //sort in ascending order for array
#define SORTS(a) sort(a.begin(),a.end()) //sort in ascending order for string type
typedef long long ll;
void SCAN(int *a){scanf("%d",a);} //scan for type int
void SCAN(int *a,int n){int i;REP(i,n){scanf("%d",&a[i]);}} //scan for type int array
void SCAN(ll *a){scanf("%lld",a);} //scan for type long long int
void SCAN(ll *a,int n){int i;REP(i,n){scanf("%lld",&a[i]);}} //scan for type long long int array
void SCAN(char *c){scanf(" %c",c);} //scan for type char
void SCAN(char *c,int n){int i;REP(i,n){scanf(" %c",&c[i]);}} //scan for type char array
const int MOD = 1000000007;
const int INF = 1000000000;
int pascalTri(int n,int r){
int tri[n+1][n+1];
int i,j;
REP(i,n+1){REP(j,n+1){tri[i][j]=0;}}
REP(i,n+1){
REP(j,n+1){
if(j>i){break;}
if(j==0||j==i){tri[i][j]=1;}else{tri[i][j]=(tri[i-1][j-1]%MOD+tri[i-1][j]%MOD)%MOD;}
}
}
return tri[n][r];
}
const int DX4[4]= {-1,0,0,1};
const int DY4[4]= {0,-1,1,0};
int w,h;
int n;
int X[30]={0},Y[30]={0};
ll dp[101][101][101][101]={0};
ll dfs(int x1,int y1,int x2,int y2){
if(dp[x1][y1][x2][y2]!=0){return dp[x1][y1][x2][y2];}
ll ret=0;
ll temp;
REP(i,n){
temp=0;
if(x1<=X[i]&&X[i]<=x2&&y1<=Y[i]&&Y[i]<=y2){
temp=(x2-x1)+(y2-y1)+1;
temp+=dfs(X[i]+1,Y[i]+1,x2,y2);
temp+=dfs(x1,Y[i]+1,X[i]-1,y2);
temp+=dfs(X[i]+1,y1,x2,Y[i]-1);
temp+=dfs(x1,y1,X[i]-1,Y[i]-1);
}
ret=max(ret,temp);
}
dp[x1][y1][x2][y2]=ret;
return ret;
}
int main(){
int i,j,k;
SCAN(&w);SCAN(&h);
SCAN(&n);
REP(i,n){
SCAN(&X[i]);SCAN(&Y[i]);
}
printf("%lld\n",dfs(1,1,w,h));
return 0;
}
./Main.cpp: In function ‘void SCAN(int*)’:
./Main.cpp:13:32: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
void SCAN(int *a){scanf("%d",a);} //scan for type int
^
./Main.cpp: In function ‘void SCAN(int*, int)’:
./Main.cpp:14:57: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
void SCAN(int *a,int n){int i;REP(i,n){scanf("%d",&a[i]);}} //scan for type int array
^
./Main.cpp: In function ‘void SCAN(ll*)’:
./Main.cpp:15:33: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
void SCAN(ll *a){scanf("%lld",a);} //scan for type long long int
^
./Main.cpp: In function ‘void SCAN(ll*, int)’:
./Main.cpp:16:58...