关于判断非法的疑点

P2704 [NOI2001] 炮兵阵地

ArachnidaKing @ 2018-10-23 11:33:15

 //dp过程 
for(int i=3;i<=n;++i)//枚举当前行数 
    for(int j=1;j<=k;++j)//枚举当前行数状态 
        if((map[i]&s[j])==0)//不与地形冲突 
            for(int p=1;p<=k;++p)//枚举前一行状态 
                if((s[p]&s[j])==0)//当前行状态不与前一行冲突 
                    for(int q=1;q<=k;++q)//枚举前两行
                    //不与前两行冲突,且前两行自身不冲突 
                        if(((s[q]&s[p])==0)&&((s[q]&s[j])==0)) f[i][p][j]=max(f[i][p][j],f[i-1][q][p]+g[j]);

请问各位路过大佬,为什么如果判断p、q是否与地图冲突(冲突则continue),输出就会比正解较小?百思不得其解


by Dispwnl @ 2018-10-23 12:14:59

写丑了吧……


by Starrydream @ 2018-10-23 20:46:23

这不是8^n吗。。。果然预处理+剪枝nb


|