头像

小雪菜本大菜




离线:6小时前


最近来访(114)
用户头像
HfjNUlYZ
用户头像
嘎嘎嘎嘎嘎嘎嘎
用户头像
a睿
用户头像
bcwing
用户头像
3I算法训练
用户头像
雾璃鸦
用户头像
ZnSO4
用户头像
shengshu_
用户头像
TSFH
用户头像
itdef
用户头像
摆烂波比
用户头像
张伟豪
用户头像
微笑
用户头像
hznode
用户头像
Kim_6
用户头像
iKUNの少轩
用户头像
ohhhdddentist
用户头像
DZDdzd
用户头像
北海没有WA
用户头像
规则

问题 搜索

https://www.luogu.com.cn/problem/P1101
xdm能帮我看看这个搜索吗,我用深搜一直没写对😥😥😥😥😥😥



分享 洛谷刷题

有一起刷洛谷的兄弟嘛 进群一起内卷 300267800
🙋 🙋 ✍️✍️✍️✍️✍️



问题 洛谷

有一起刷洛谷的兄弟嘛 进群一起内卷 300267800
🙋 🙋 ✍️✍️✍️✍️✍️



问题 坐标

大家对于8连通问题的搜索坐标一般怎么定义(比较容易记住的)

我一般这样写4连通的搜索坐标
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};



问题 dfs

https://www.luogu.com.cn/problem/AT_dfs_a
求助大佬,样例过了,一直wa

#include <iostream>

using namespace std;

const int N = 510;
int n, m;

bool st[N][N];

char g[N][N];

int dx[] = { -1,0,1,0 }, dy[] = { 0,1,0,-1 };
//家 鱼店
int xa, ya, xb, yb;

bool dfs(int x, int y)
{
    if (x == xb && y == yb) return true;

    if (g[x][y] == '#') return false;
    st[x][y] = true;
    for (int i = 0; i < 4; i++)
    {
        int a = x + dx[i], b = y + dy[i];
        if (a < 0 || a >= n || b < 0 || b >= n)
            continue;
        if (st[a][b]) continue;
        if (dfs(a, b)) return true;

    }
    return false;

}

int main()
{
    cin >> n >> m;

    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        {
            cin >> g[i][j];
            if (g[i][j] == 's')
            {
                xa = i;
                ya = j;
            }
            if (g[i][j] == 'g')
            {
                xb = i;
                ya = j;
            }
        }

    if (dfs(xa, ya)) cout << "Yes";
    else cout << "No" ;
    return 0;
}





问题 子矩阵

在一个n * n的矩阵里面求有多少个r *r的子矩阵怎么求,为什么😢



问题 搜索

给出一张地图,
要求从起点能否到达终点,给出多组测试数据,用什么写比较好



问题 洛谷 烤鸡

xdm,这题暴搜怎么写呀
https://www.luogu.com.cn/problem/P2089#submit

#include <iostream>

using namespace std;
const int N =15;
int cnt;
int state[N];
int st[4]={0,1,2,3};
int n;
//第i个配料 美味程度
void dfs(int u,int dels)
{
    if(u> 10){
    if(dels == n)
    {
        for(int i =1;i<=n;i++) cout << state[i] << ' ';
        cout << endl;
        return;
    }
    }
    for(int i =1;i<= n;i++ )
    {
        //枚举配料
        for(int j = 1;j<=3;j++)
        {
            state[u] = st[j];

            if(dels > n) break;
            dfs(u+1,dels+ st[j]);
            state[u] = 0;
            return;
        }
    }

}

int main()
{
    //输入美味程度
    cin >> n;

    dfs(1,n);
}




https://www.luogu.com.cn/problem/solution/P1002
当然如果只是按照这个公式推肯定不行,因为 f 的初始数值都是 0,再怎么推也都是 0,我们要让 f(1,1) 能根据上面得到的式子推出答案是 1,这样才能有有意义的结果。根据 f(1,1)=f(0,1)+f(1,0),我们只需要让 f(1,0)==1 或者 f(0,1)=1 即可。

这句解释有点没懂,为啥不是 f(1,0) 和 f(0,1) 都初始化为 1,因为有可能是从上面过来也有可能是左边过来,上面过来算一种方案,左边过来算一种方案,然后取一个和



问题 上下取整