P1896 [SCOI2005]互不侵犯 状压dp
正解:状压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的更多相关文章
- BZOJ1087[SCOI2005]互不侵犯——状压DP
题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入 只有一行,包含两个数N,K ( ...
- SCOI2005 互不侵犯 [状压dp]
题目传送门 题目大意:有n*n个格子,你需要放置k个国王使得它们无法互相攻击,每个国王的攻击范围为上下左走,左上右上左下右下,共8个格子,求最多的方法数 看到题目,是不是一下子就想到了玉米田那道题,如 ...
- [SCOI2005]互不侵犯 (状压$dp$)
题目链接 Solution 状压 \(dp\) . \(f[i][j][k]\) 代表前 \(i\) 列中 , 已经安置 \(j\) 位国王,且最后一位状态为 \(k\) . 然后就可以很轻松的转移了 ...
- luogu1896 [SCOI2005]互不侵犯 状压DP
题目大意 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子.( 1 <=N <=9, 0 ...
- NOI P1896 互不侵犯 状压DP
题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 注:数据有加强(2018/4/25) ...
- 洛谷——P1896 [SCOI2005]互不侵犯
P1896 [SCOI2005]互不侵犯 状压DP入门题 状压DP一般需要与处理状态是否合法,节省时间 设定状态dp[i][j][k]表示第i行第j个状态选择国王数为k的方案数 $dp[i][j][n ...
- 洛谷 P1896 [SCOI2005]互不侵犯
洛谷 P1896 [SCOI2005]互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8 ...
- 洛谷P1896 [SCOI2005]互不侵犯King
P1896 [SCOI2005]互不侵犯King 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 ...
- 【题解】洛谷P1896 [SCOI2005] 互不侵犯(状压DP)
洛谷P1896:https://www.luogu.org/problemnew/show/P1896 前言 这是一道状压DP的经典题 原来已经做过了 但是快要NOIP 复习一波 关于一些位运算的知识 ...
随机推荐
- 初识Spring Security
本文参考或者转自:http://haohaoxuexi.iteye.com/blog/2154299 1.新建Spring Security配置文件spring-security.xml:<?x ...
- [echarts] 横纵数据散点图
需求:课程平均分(X)与课程通过率散点图 http://echarts.baidu.com/echarts2/doc/example/scatter1.html https://www.cnblogs ...
- lua系列之 lua-cjson模块安装报错问题解决
lua-cjson下载 下载地址 报错信息 [root@LeoDevops lua-cjson]# make cc -c -O3 -Wall -pedantic -DNDEBUG -I/usr/loc ...
- ABBYY PDF Transformer+系统要求
ABBYY PDF Transformer+是一个新的,全面的巧妙解决PDF文档的工具,它将泰比的光学字符识别(OCR)技术和Adobe®PDF技术完美结合,以确保实现便捷地处理任何类型的PDF文件, ...
- 如何修改DEDECMS文章标题长度
方法一: 首先你要进入dedecms后台,系统——系统基本参数——其他选项——文档标题最大长度——在这修改为200或更大(其实200应该是足够了). 方法二: 进入phpmyadm ...
- 深入Java内存模型之阅读理解(1)
Java内存模型的抽象 在java中,所有实例域.静态域和数组元素存储在堆内存中,堆内存在线程之间共享(本文使用“共享变量”这个术语代指实例域,静态域和数组元素).局部变量(Local variabl ...
- [Android] 基于 Linux 命令行构建 Android 应用(二):命令行管理项目
创建 Android 项目 在命令行创建 Android 项目需要用到 android 工具(该工具由 Android SDK 提供,位于 <sdk>/tools/ 目录下.).它能自动生 ...
- 【转载】技巧:Vim 的纵向编辑模式
如果要我选一个Vim中让我觉得Life Changing功能的话,我一定会选Vim的块编辑功能,也就是Ctrl+V,虽然还有些别的编辑器也有这功能,但目前为止,我从中受益颇大 原文地址:技巧:Vim ...
- C#实现二叉树--二叉链表结构
二叉树的简单介绍 关于二叉树的介绍请看这里 : 二叉树的简单介绍 http://www.cnblogs.com/JiYF/p/7048785.html 二叉链表存储结构: 二叉树的链式存储结构是指,用 ...
- [IOI 2000]POJ 1160 Post Office
Post Office Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22278 Accepted: 12034 Descrip ...