Logo smzx_chenzhiyu的博客

博客

求救!

2023-12-11 19:26:14 By smzx_chenzhiyu

这个代码到底有什么错啊???

[题目链接:例9.16 哈密尔顿回路] http://www.yuyaoi.cn:8000/contest/256/problem/1272

#include<bits/stdc++.h>
using namespace std;
long long n,m,i,j,k,x,y,f[15][15][1<<15];
bool a[20][20];
int main()
{
    cin>>n>>m;
    for(i=1;i<=n;i++)
       for(j=1;j<=m;j++)
          cin>>a[i][j];
    f[0][m][0]=1;
    for(i=1;i<=n;i++)
    {
        for(j=0;j<(1<<m);j++)
           f[i][0][j<<1]=f[i-1][m][j];
        for(j=1;j<=m;j++)
           for(k=0;k<(1<<m+1);k++)
           {
               x=(k>>j-1)&1;
               y=(k>>j)&1;
               if(!a[i][j]&&!x&&!y)
                 f[i][j][k]+=f[i][j-1][k];
               else
                 if(!x&&!y&&a[i+1][j]&&a[i][j+1])
                   f[i][j][k^(1<<j)^(1<<j-1)]+=f[i][j-1][k];
                 else
                   if(x&&y&&a[i-1][j]&&a[i][j-1])
                     f[i][j][k^(1<<j)^(1<<j-1)]+=f[i][j-1][k];
                   else
                     if(!x&&y||x&&!y)
                     {
                         f[i][j][k^(1<<j)^(1<<j-1)]+=f[i][j-1][k];
                         f[i][j][k]+=f[i][j-1][k];
                     }
           }
    }
    cout<<f[n][m][0]<<endl;
    return 0;
}

评论

smzx_chenzhiyu
@dfdj_zhangjinfeng @syyx_zhangshihao @syxx_zhangyifan @dfdf_xuziye @caxx_shaozenan @dfdf_luyanlin @syxx_huangshiran @dfdf_zhaozekai @syxx_luoxuanhao @dfdf_maoshenxing @dfdj_loushuhao
smzx_chenzhiyu
@smzx_chenzhiyu
caxx_shaozenan
@smzx_chenzhiyu if(!x&&y||x&&!y) { f[i][j][k^(1<<j)^(1<<j-1)]+=f[i][j-1][k]; f[i][j][k]+=f[i][j-1][k]; } 这里要加特判呀,万一遇到障碍格呢。
dfdf_zhaozekai
题目描述 给出一棵树(以1为根),动态地加入叶子,输出每次加叶子后的树的直径边数 输入格式 第1行,一个整数n,m,表示树的结点个数和当前连的边(保证构成一棵树)。 接下来n−1行,每行两个整数x和y,表示结点x和结点y之间有一条边。 接下来一行输入一个整数Q,代表需要加入的叶子数量 后m行每行输入两个整数u,v,表示两节点间存在一条边。 输出格式 共Q行,第i行为一个正整数,分别表示加入新叶子后的最大直径 样例数据 输入1 5 2 2 3 2 1 2 4 1 5 3 输出1 3 4 数据规模与约定 对于 50% 的数据,1≤n,m,Q≤103。 对于 100% 的数据,1≤n,m,Q≤105。