正解:状压dp

解题报告:

看到是四川省选的时候我心里慌得一批TT然后看到难度之后放下心来觉得大概没有那么难

事实证明我还是too young too simple了QAQ难到爆炸TT我本来还想刚一道紫题搞完这个之后就佛了不做了TT

不扯淡了太太太浪费时间辣

好那直接港

首先我想到的就觉得大概是和那个奶牛玉米田的没有太大区别改一改就能ac!

然后我就先照着玉米田做完,发现过不了样例

于是改,改了半小时,好像差不多了,因为要存储放了几个国王巴拉巴拉的

还是没过样例,输出下过程,发现是上一种状态有很多种放国王的数量,又改改改改改

然后改到下课也没改完,心态爆炸,决定不做了第二天做

然后今天我又改了差不多半小时,总算ac了……开了两个三维数组三四个二维数组……太麻烦了TT

好的抱怨完了直接放程序吧quq

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rp(i,x,y) for(ll i=x;i<=y;i++)
ll zt[<<],cnt,num[<<],f[][<<][],cc[][<<][<<],ans=;][][<<];
//我jio得解释下这里其他就没有太多要港的辣?
//zt:合法状态
//cnt:有几个合法状态
//num:这个状态下放了几个国王
//f[i][j][k]:到第k行本层状态为j共计放了i个国王了的 合法方案数
//cc[i][j][k]:第i行状态为j时第k种可能的放了国王的数量 0存的是有几种可能的数量
//t[i][j][k]:就是个桶,是为了避免cc中存入重复的数量 意为:在第j行状态为k时数量为i是否存储过,若存储过自然不用处理,没有的话是要cc[0]++的嘛
//ans:就是最后的统计,明白吧?
//好的解释完了!那我觉得后面就没有那——么难理解辣!
ll read()
{
    ;;
    '))ch=getchar();
    ,ch=getchar();
    )+(x<<)+(ch^'),ch=getchar();
    return y?x:-x;
}
int cl(ll x)
{
    ;
    )
    {
        )t++;
        x>>=;
    }
    return t;
}
int main()
{
    ll n=read(),m=read();
    rp(i,,(<<n)-)
        ))==) && ((i&(i>>))==))zt[++cnt]=i,num[cnt]=cl(i),cc[][i][]=,cc[][i][]=num[cnt];//预处理 自己看不难理解
    rp(i,,cnt)f[num[i]][zt[i]][]=;//第一行要特殊处理
    rp(i,,n)
        rp(j,,cnt)
            rp(k,,cnt)
                ) && ((zt[j]&(zt[k]<<))==) && ((zt[j]&(zt[k]>>))==))//j为本行k为上一行状态
                    rp(q,,cc[i-][zt[k]][])//cc[balabala][balabala][q]枚举上一行状态为ztk时能放到的国王状态
                        ][zt[k]][q]+num[j]<=m)
                        {
                            f[cc[i-][zt[k]][q]+num[j]][zt[j]][i]+=f[cc[i-][zt[k]][q]][zt[k]][i-];//转移
                            ][zt[k]][q]+num[j]][i][zt[j]]==)//判断是否要加入cc0里面
                            {
                                cc[i][zt[j]][]++;
                                t[cc[i-][zt[k]][q]+num[j]][i][zt[j]]=;
                                cc[i][zt[j]][cc[i][zt[j]][]]=cc[i-][zt[k]][q]+num[j];
                            }
                        }
    rp(i,,cnt)ans+=f[m][zt[i]][n];
    printf("%lld",ans);
    ;
}
//完美结束yeah!

点我♂看♂灵巧在线wa题QAQ

哇我难得写这么多注释!不容易!好的那搞完了就去刚今天考试题目了TT

哎我太苦了好不容易逃脱状压dp又要进入考试题的深渊QAQ

P1896 [SCOI2005]互不侵犯 状压dp的更多相关文章

  1. BZOJ1087[SCOI2005]互不侵犯——状压DP

    题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入 只有一行,包含两个数N,K ( ...

  2. SCOI2005 互不侵犯 [状压dp]

    题目传送门 题目大意:有n*n个格子,你需要放置k个国王使得它们无法互相攻击,每个国王的攻击范围为上下左走,左上右上左下右下,共8个格子,求最多的方法数 看到题目,是不是一下子就想到了玉米田那道题,如 ...

  3. [SCOI2005]互不侵犯 (状压$dp$)

    题目链接 Solution 状压 \(dp\) . \(f[i][j][k]\) 代表前 \(i\) 列中 , 已经安置 \(j\) 位国王,且最后一位状态为 \(k\) . 然后就可以很轻松的转移了 ...

  4. luogu1896 [SCOI2005]互不侵犯 状压DP

    题目大意 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子.( 1 <=N <=9, 0 ...

  5. NOI P1896 互不侵犯 状压DP

    题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 注:数据有加强(2018/4/25) ...

  6. 洛谷——P1896 [SCOI2005]互不侵犯

    P1896 [SCOI2005]互不侵犯 状压DP入门题 状压DP一般需要与处理状态是否合法,节省时间 设定状态dp[i][j][k]表示第i行第j个状态选择国王数为k的方案数 $dp[i][j][n ...

  7. 洛谷 P1896 [SCOI2005]互不侵犯

    洛谷 P1896 [SCOI2005]互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8 ...

  8. 洛谷P1896 [SCOI2005]互不侵犯King

    P1896 [SCOI2005]互不侵犯King 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 ...

  9. 【题解】洛谷P1896 [SCOI2005] 互不侵犯(状压DP)

    洛谷P1896:https://www.luogu.org/problemnew/show/P1896 前言 这是一道状压DP的经典题 原来已经做过了 但是快要NOIP 复习一波 关于一些位运算的知识 ...

随机推荐

  1. .NET实现事务的编码方式

    1,在T-SQL语句中用begin tran,end tran的方式 begin tran --select top(1) * from dbo.test with(updlock) update t ...

  2. Android应用图标微技巧,8.0系统中应用图标的适配

    现在已经进入了2018年,Android 8.0系统也逐渐开始普及起来了.三星今年推出的最新旗舰机Galaxy S9已经搭载了Android 8.0系统,紧接着小米.华为.OV等国产手机厂商即将推出的 ...

  3. R语言三元相图的做法

    通常情况下,对于三维数据,我们会用三维图表来展示,想要从三维图表上观察出一定的规律,需要一定的空间想象力: 而三元相图,其实就是用二维平面的1个等边三角形来表征三维数据,三角形的每一条边对应1个维度, ...

  4. 安卓开发笔记——丰富多彩的TextView

    随手笔记,记录一些东西~ 记得之前写过一篇文章<安卓开发笔记——个性化TextView(新浪微博)>:http://www.cnblogs.com/lichenwei/p/4411607. ...

  5. bigtable原理

    bigtable原理 数据模型 A Bigtable is a sparse, distributed, persistent multi-dimensional sorted map. The ma ...

  6. JavaScript隐藏的坑一,隐式调用toString

    最近在重新学习JavaScript,看动态原型对象的时候,打印了两个用同一个构造函数生成的对象,但是打印结果却不一样,请看代码: var box1=new Box(); console.log(box ...

  7. 【zheng环境准备】安装activemq

    1.下载http://activemq.apache.org/activemq-5140-release.html 2.移动到linux机器上 3.解压 tar -zxvf apache-active ...

  8. mui---获取上一级窗口

    我们在用MUI做APP的时候,会用到要获取上一级的窗口.具体方法:获取当前webview窗口的创建者. 代码: plus.webview.currentWebview().opener();

  9. SSM项目实战

    1.  实战才是检验学的怎么样的标准,一个小项目,运行老是出错,加上自己一贯的马虎的习惯,不严谨,就使学习之路更加的曲折了,感觉自己在这一行中比较吃力,但是自己选择了这条路,就得好好走下去,不要怀疑自 ...

  10. web -- Navigator.vibrate(); 使设备(有振动硬件)产生有频率的振动

    MDN 文档 此方法需要用户手势. 否则,它返回false. const koa2 = require(`koa2`); const Router = require(`koa-router`); c ...