牛客小白月赛7-H CSL的校园卡

牛客小白月赛7-H CSL的校园卡_第1张图片

地址:https://www.nowcoder.com/acm/contest/190/H

思路:状态压缩DP+BFS

用dp[x1][y1][x2][y2][s]来表示两人分别在点 (x1,y1),(x2,y2)处走过的状态s时的所用时间,那么再用BFS来找到第一个满足条件的即可

Code:

#include
#include
using namespace std;
 
struct node{
    int x1,y1;
    int x2,y2;
    int t,s;
};
const int MAX_S=(1<<16)+5;
const int f[][2]={-1,0, 1,0, 0,-1, 0,1};
int n,m,ans,Sum;
string G[5];
bool boo[5][5][5][5][MAX_S];
 
void BFS(int x,int y);
int main()
{
    cin>>n>>m;
    int x0,y0;
    for(int i=0;i>G[i];
        for(int j=0;j Q;
    Q.push(node{x,y,x,y,1<<(x*4+y),0});
    boo[x][y][x][y][(1<<(x*4+y))]=1;
    while(!Q.empty()){
        int x1,y1,x2,y2;
        node u=Q.front();   Q.pop();
        for(int i=0;i<4;++i)
        {
            x1=u.x1+f[i][0];    y1=u.y1+f[i][1];
            int t1=1<<(x1*4+y1);
            if(x1>=0&&x1=0&&y1=0&&x2=0&&y2

 

你可能感兴趣的:(算法,搜索,牛客,状态压缩DP)