#include <iostream>
#include <vector>
#include <queue>
using namespace std;
using ll=long long;
int main(){
    int n,m,ans=0,k,a,b,cur;
    cin>>n>>m;
    vector<vector<int>> v(n+2,vector<int>(m+2,-1)),d(n+2,vector<int>(m+2,-1));
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>v[i+1][j+1];
            d[i+1][j+1]=v[i+1][j+1];
        }
    }
    cin>>k;
    bool flag=0,tmp;
    vector<pair<int,int>> p(k);
    for(int i=0;i<k;i++){
        cin>>a>>b;
        p[i]={a+1,b+1};
    }
    for(int t=0;t<(1<<(2*k));t++){
        tmp=1;
        cur=0;
        for(int i=0;i<k;i++){
            a=p[i].first;b=p[i].second;
            if((t&(1<<(2*i)))&&(t&(1<<(2*i+1)))){
                if(d[a][b]==-1||d[a-1][b]==-1||d[a][b+1]==-1||d[a][b-1]==-1)tmp=0;
                cur+=d[a][b]+d[a-1][b]+d[a][b+1]+d[a][b-1];
                d[a][b]=-1;d[a-1][b]=-1;d[a][b+1]=-1;d[a][b-1]=-1;
            }
            if((t&(1<<(2*i)))&&!(t&(1<<(2*i+1)))){
                if(d[a][b]==-1||d[a+1][b]==-1||d[a][b+1]==-1||d[a][b-1]==-1)tmp=0;
                cur+=d[a][b]+d[a+1][b]+d[a][b+1]+d[a][b-1];
                d[a][b]=-1;d[a+1][b]=-1;d[a][b+1]=-1;d[a][b-1]=-1;
            }
            if(!(t&(1<<(2*i)))&&(t&(1<<(2*i+1)))){
                if(d[a][b]==-1||d[a-1][b]==-1||d[a+1][b]==-1||d[a][b-1]==-1)tmp=0;
                cur+=d[a][b]+d[a-1][b]+d[a+1][1]+d[a][b-1];
                d[a][b]=-1;d[a-1][b]=-1;d[a+1][b]=-1;d[a][b-1]=-1;
            }
            if(!(t&(1<<(2*i)))&&!(t&(1<<(2*i+1)))){
                if(d[a][b]==-1||d[a-1][b]==-1||d[a+1][b]==-1||d[a][b+1]==-1)tmp=0;
                cur+=d[a][b]+d[a-1][b]+d[a+1][1]+d[a][b-1];
                d[a][b]=-1;d[a-1][b]=-1;d[a+1][b]=-1;d[a][b+1]=-1;
            }
        }
        for(int i=0;i<k;i++){
            a=p[i].first;b=p[i].second;
            if((t&(1<<(2*i)))&&(t&(1<<(2*i+1)))){
                d[a][b]=v[a][b];d[a-1][b]=v[a-1][b];d[a][b+1]=v[a][b+1];d[a][b-1]=v[a][b-1];
            }
            if((t&(1<<(2*i)))&&!(t&(1<<(2*i+1)))){
                d[a][b]=v[a][b];d[a+1][b]=v[a+1][b];d[a][b+1]=v[a][b+1];d[a][b-1]=v[a][b-1];
            }
            if(!(t&(1<<(2*i)))&&(t&(1<<(2*i+1)))){
                d[a][b]=v[a][b];d[a-1][b]=v[a-1][b];d[a+1][b]=v[a+1][b];d[a][b-1]=v[a][b-1];
            }
            if(!(t&(1<<(2*i)))&&(t&(1<<(2*i+1)))){
                d[a][b]=v[a][b];d[a-1][b]=v[a-1][b];d[a-1][b]=v[a-1][b];d[a][b-1]=v[a][b-1];
            }
        }
        if(tmp){
            //cout<<cur<<"\n";
            flag=1;
            ans=max(ans,cur);
        }
    }
    if(flag)cout<<ans<<"\n";
    else cout<<"No\n";
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |