P2704 [NOI2001]炮兵阵地 (状压DP)

CodeGym 立即下载

题目链接

题解:

设dp方程 dp[id][j][i] = max(dp[id][j][i], dp[id-1][k][j] + no[i].num) 为要考虑上一行和上上行。

数组全开会炸内存,用滚动数组,滚三行即可。

代码:

%:pragma GCC optimize(3)
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <bitset>
#include <cstdio>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;

typedef long long ll;
#define int ll
#define MAXM 25000000 + 10
#define MAXN 100 + 10
#define INF 0x3f3f3f3f3f3f3f3f
const ll mod = 10007;
#define P pair<int, int>
#define fir first
#define sec second
#define fastio ios::sync_with_stdio(false), cin.tie(0)

int n, m;
int maze[MAXN], cnt;
int dp[MAXN][MAXN][MAXN];
struct node {
    int s, num;
} no[MAXN];

void pre()
{
    for(int i = 1; i <= n; i ++) {
        for(int j = 1; j <= m; j ++) {
            char c; cin >> c;
            maze[i] = (maze[i] << 1) + (c == 'P');
        }
    }
    for(int i = 0; i < (1 << m); i ++) {
        if((i & (i << 1)) || (i & (i << 2))) continue;
        no[++cnt].s = i;
        for(int j = 0; (1 << j) <= i; j ++) {
            if(i & (1 << j)) no[cnt].num ++;
        }
        if((i & maze[1]) == i) dp[1][0][cnt] = no[cnt].num;
    }
}

signed main()
{
    fastio;

    cin >> n >> m;
    pre();
    for(int i = 1; i <= cnt; i ++) {
        if((no[i].s & maze[2]) != no[i].s) continue;
        for(int j = 1; j <= cnt; j ++) {
            if((no[i].s & no[j].s) || ((no[j].s & maze[1]) != no[j].s)) continue;
            dp[2][j][i] = max(dp[2][j][i], dp[1][0][j] + no[i].num);
        }
    }
    for(int id = 3; id <= n; id ++) {
        for(int i = 1; i <= cnt; i ++) {
            if((no[i].s & maze[id]) != no[i].s) continue;
            int ma = 0;
            for(int j = 1; j <= cnt; j ++) {
                if((no[i].s & no[j].s) || ((no[j].s & maze[id-1]) != no[j].s)) continue;
                for(int k = 1; k <= cnt; k ++) {
                    if((no[i].s & no[k].s) || (no[j].s & no[k].s) || ((no[k].s & maze[id-2]) != no[k].s)) continue;
                    dp[id][j][i] = max(dp[id][j][i], dp[id-1][k][j] + no[i].num);
                }
            }
        }
    }
    int ans = 0;
    for(int i = 1; i <= cnt; i ++) {
        for(int j = 1; j <= cnt; j ++) {
            ans = max(dp[n][i][j], ans);
        }
    }
    cout << ans << endl;
}

/*

老实说,
要到几岁才开始不相信圣诞老人的存在……
这类无聊的话题对我而言,
根本不痛不痒的。
不过,
讲到我从几岁起开始不相信圣诞老人就是那个穿着红衣服的老公公时,
我能确定地说,
我根本打从一开始就不相信。
我知道幼稚园圣诞节庆祝会时出现的圣诞老人是假的,
回溯记忆,
还能记起周围的幼稚园小朋友都一脸不信任地望着假扮圣诞老人的园长老师。
即使没有撞见老妈正在亲吻圣诞老公公,
机灵的我也老早就怀疑只在圣诞节工作的老爷爷是否真的存在了。
不过,
我却是过了很久以后,
才发现外星人、幽灵、妖怪、超能力者以及特摄、动画里头,
那些与邪恶组织战斗的英雄们并不存在这世上。
不,
说不定我早就发现了,
只不过一直不想承认而已。
因为,
在我的内心深处,
是十分渴望那些外星人、幽灵、妖怪、超能力者以及邪恶组织突然出现在眼前的。
和我生活的这个普通世界相比,
特摄、动画里头所描绘的世界,
反而更有魅力。
我也想活在那种世界里!
我真的好想拯救被外星人绑架并关在透明的大型豌豆夹里头的少女…
也想拿着雷射枪运用智慧与勇气击退企图改写历史的未来人…
或者光用一句咒语就收拾了恶灵跟妖怪,
再不然就是和秘密组织的超能力者进行超能力的战斗!
等等,
冷静一下,
假设我被外星人、幽灵、妖怪、超能力者那类的生物袭击,
没有任何特殊能力的我怎么可能和他们对抗?
于是,
我便如是幻想 ——
某天,
班上突然转来一个谜样的转学生,
他其实是个外星人或未来人那类的生物,
并拥有未知的能力,
后来他跟坏人战斗,
而我只要设法让自己被卷进那场战争就好了。
主要战斗的人是他,
而我则是追随他的小跟班。
啊啊,
实在太棒了,
我真是聪明啊!
要不然就是这样。
某天,
我那不可思议的力量突然觉醒,
就像隔空取物或精神念力之类的。
而且地球上其实还有很多拥有超能力的人类存在,
自然也会有一个组织专门收容这些人。
不久之后,
善良的组织便派人来迎接我。
而我也成为组织的一员共同对抗企图征服世界的邪恶超能力者。
不过,
现实却是意外地残酷。
现实的生活中,
并没有半个转学生转来我班上,
我也没看过UFO…
就算去了地方上常出现幽灵或妖怪的灵异地点也连个鬼影都没有…
花了两小时盯着桌上的铅笔,
它却连一微米都没移动…
上课时死盯着前座同学的头,
却怎么样也无法读出他在想什么。
我就这样边惊叹世界物理法则经常出现的现象,
边不停自嘲,
不知从何时起,
我就开始不看电视上的UFO特别节目或灵异节目了。
因为不可能会有那种东西……
不过后来我也成长到仅对那方面的事情存有一丝留恋的程度。
国中毕业之后,
我便从那孩提时代的梦想毕业,
逐渐习惯这个世界的平凡。
而让我还有一缕期待的一九九九年也没有发生什么事。
进入二十一世纪后,
人类依旧无法迈出月球到其他星球去。
看这情况,
在我还活着的时候,
想从地球当天往返阿尔法人马座似乎是不太可能的。
我脑海中时而幻想着这些事,
终于也没啥感慨地成为高中生 —— 直到遇到了凉宫春日。
之后,
我就这么糊里糊涂地进入学区内的县立高中就读。
起初我还很后悔,
因为这座学校位于很高的山上,
就算是春天也要挥汗如雨地爬上直窜山顶的坡道,
想轻松健行的那份悠闲早已消失无踪。
一想到今后三年每天一大早都得这样爬山,
我的心情就阴郁无比。
或许是早上差点睡过头的关系,
走路的速度自然加快许多,
虽然也曾想过以后干脆早十分钟起床,
慢慢走去上学就不会这么累,
不过一想到临起床前的那十分钟睡眠是多么的宝贵,
我随即放弃了这个念头。
所以,
我相信未来的三年还是得持续这个晨间的运动。
一想到这里,
心情就更沉重了。

*/

 

codeGym:随机学习和测试套件 代码健身房 随机学习和测试套件。 立即下载

相关推荐

仿真每日一练 | 有限元模态分析详解

结构的振动一直是工业领域产品分析的重点,在振动的仿真分析中,模态分析是其最基本的分析类型,通过研究结构的固有频率和振型对产品的设计提供指导。2.2、在interaction模块,通过special->Spring,在各点之间分别创建弹簧单元,弹簧刚度为1000。2.1、在interaction模块,创建两个RP点,与两侧RP点各间隔100大小,如图3所示;其中M、K、C均为n*n的矩阵,s、x、v为n*1的矢量,n为系统自由度数量。3、在Assembly模块创建装配体,两点之间的距离为100,如图2所示;

ansysxuexizhe的博客 1655

洛谷 P2765 魔术球问题 (网络流 + 思维)

题目链接 题意: 给你 n 根柱子,需要往上放小球,小球的编号从 1 开始(1,2,3 ...),要使得每两个相邻的球之和为平方数(4, 9, 16 ...),问最多可以放多少个小球。 题解: 从 1 开始,一个一个地加入小球,每个小球分为两个点,一个点由源点流向它,容量为 1 ,另一个点由它流向汇点,容量也为 1 。那么每次加入一个点,如果能够和之前加入的数构成平方数,则将这个数的第一个...

ttoobne 2755

3分钟搞懂欧式距离变换(EDT):从暴力算法到Felzenszwalb的演进史

本文系统梳理了欧式距离变换(EDT)从暴力算法到高效线性算法的演进历程。重点解析了光栅扫描算法和Felzenszwalb算法的核心思想与实现,并探讨了其在机器人路径规划中生成欧几里得符号距离场(ESDF)的关键应用,为开发者提供了清晰的算法选型与实战指南。

fern8的博客 976

【Java】A乘积—方法:BigInteger—(OJ:牛客-练习赛54)

链接:https://ac.nowcoder.com/acm/contest/1842/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 记 ,即二进制表示下后i位为1,其余位为0的数。给定一个正整数n,求。 输出答案对998244353取模后的结果。T组数据。 输入描...

weixin_43785855的博客 587

AD9361 LVDS数据接口时序解析与FPGA实现

本文详细解析了AD9361 LVDS数据接口的时序特性与FPGA实现方法,重点探讨了DATA_CLK、Rx_FRAME等关键信号的时序关系及数据拼接技巧。通过Verilog代码示例和调试经验分享,帮助开发者解决跨时钟域处理、IQ数据重组等常见问题,提升射频收发系统的稳定性与性能。

weixin_29186249的博客 128

从牛顿冷却定律到热传导方程:一维热传导方程的物理直觉与数学推导

本文从牛顿冷却定律出发,结合傅里叶热传导定律和能量守恒原理,系统推导了一维热传导方程的数学形式。通过微元分析和物理直觉,揭示了温度随时间变化与空间二阶导数之间的关系,并阐释了热扩散率α的物理意义。文章还探讨了方程的边界条件、数值解法及其在材料科学和工程中的应用,为理解热量传递提供了清晰的物理图像和数学框架。

palm99的专栏 837

Squares (AtCoder Regular Contest 125)(枚举+思维)

传送门 题意 给你一个正整数N,找出有多少个整数对(x,y),满足如下条件,答案对998244353取模 1 <= N <= 1012 1<= x,y <=N. x*x-y是一个完全平方数.(此处0也是完全平方数) 思路 x2 - y = z2 x2 - z2 = y (x - z)(x + z) = y 设 l = x - z, r = x + z 由题意知z >= 0, 又由上式可知, 1 <= l <= sqrt(n),l <= r <=

QQ2530063577的博客 435

HFSS入门学习笔记——微带一分四功分器的设计与仿真

功率分配器是将输入信号功率分成相等或不相等的几路功率输出的一种多端口无源微波网络,用于功率分配和功率合成。工程上常用的微带功分器有T型功分器和威尔金森功分器。经典的威尔金森功分器有几个缺点:①、多应用于低频段,高频段时,波长会与隔离电阻的尺寸相比拟,此时需要考虑电阻的分布参数效应;②、大功率应用时,隔离电阻的耗散功率要很大,因此隔离电阻的体积也会比较大。

weixin_42126696的博客 2万+

【Python】取火柴小游戏(巴什博弈)

当我们想要玩一个简单而有趣的游戏,同时又想锻炼自己的编程技能时,一个经典的选择就是火柴游戏。这个游戏的规则很简单:有一堆火柴,每次可以拿走1到6根,两名玩家轮流取火柴,拿到最后一根的玩家获胜。在本篇博客中,我们将使用Python来模拟和玩这个火柴游戏。

cout0 1509

基于SOEM的伺服电机控制实战:从配置到调试

本文详细介绍了基于SOEM的伺服电机控制实战,从硬件配置到软件调试的全过程。通过分享PDO映射、状态机控制、性能优化等核心技巧,帮助开发者快速掌握EtherCAT通信与伺服电机控制的关键技术,提升工控系统开发效率。

weixin_29165465的博客 519

GEE:本地影像上传到GEE的Assets中,并输入机器学习算法中作为特征变量

当我们在 Google Earth Engine(GEE)中应用机器学习算法时,会输入一些影像作为特征变量数据,进一步根据这些特征影像去推理未知区域的数据。但是 GEE 平台上计算特征变量的 API 函数并不是非常全面,我们希望获得更多的特征用于分类。这个时候,我们可以将本地计算的特征影像上传到 GEE 中进行后续处理。本文记录了从本地上传特征数据到 GEE 的 Assets 中的教程,用于后续在 GEE 中分类或者回归使用。本文也可作为《》一文的补充。

养乐多的博客 1730

蓝魔法师

链接:https://www.nowcoder.com/acm/contest/215/C 来源:牛客网   题目描述 “你,你认错人了。我真的,真的不是食人魔。”--蓝魔法师   给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于k,两种方案不同当且仅当存在一条边在一个方案中被删除,而在另一个方案中未被删除,答案对998244353取模 输入描述: 第一行两个整数n...

海绵的博客 477

【数据集】中国广泛时空水质数据集(1980-2022)

简介中国广泛时空水质数据集(1980-2022)

WW、forever的博客 3991

P2704 [NOI2001] 炮兵阵地-状压dp题解

本文是题解,不会介绍什么是状压dp,萌新请进我主页有介绍状压dp作者是蒟蒻,提供的思路及标程没有滚动数组等优化,但是足以在洛谷评测机通过。

senlinguyvan1的博客 1026

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

P2704 [NOI2001]炮兵阵地(状压dp)

题目链接 题解:这题其实会状压dp就很简单了,只是限制条件有点多。 先预处理出一行的每一个合法的状态,这个基本操作,左移一位,两位,右移一位,两位,判断一下就好了。 设dp[i][j][k],意思是在第i行,第i行的状态为j,第i- 1行状态为k能放的最多炮阵。 然后转移要三层循环,比如dp[i][j][k] 能被 dp[i - 1][k][z] 转移的条件是,i不能打到j,以及i不能...

qq_42129242的博客 223

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

总结状压DP——例题 P2704 [NOI2001]炮兵阵地

P2704 [NOI2001]炮兵阵地 题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队。一个NM的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的...

qq_42899221的博客 335

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

P2704 [NOI2001] 炮兵阵地 状压DP

P2704 [NOI2001] 炮兵阵地 HINTHINTHINT 对于 100% 的数据,N≤100N≤100N≤100,M≤10M≤10M≤10,保证字符仅包含 ppp 与 hhh。 M的数据范围很小,考虑状压DP。 首先,影响第iii行的有i−1i-1i−1行和i−2i-2i−2行,所以我们的dpdpdp数组要体现出来这两个数据的,同时体现出来自己现在在哪行。 所以我们可以开个三维的dpdpdp数组:dp[pre][now][i]dp[pre][now][i]dp[pre][now][i],其中的i

qq_51509008的博客 200

洛谷 P2704 [NOI2001]炮兵阵地 (状压dp)

P2704 [NOI2001]炮兵阵地 洛谷链接 题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队。一个NM的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队...

October の 补题记录 253

【洛谷P2704】【NOI2001】炮兵阵地【状压DP】

Description 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队。一个NM的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。

ssllyr 234

题解:P2704 [NOI2001] 炮兵阵地 状压dp

一篇平平淡淡的题解

轩岚的博客 256

【题解】洛谷P2704 [NOI2001] 炮兵阵地(状压DP)

洛谷P2704:https://www.luogu.org/problemnew/show/P2704 思路 这道题一开始以为是什么基于状压的高端算法 没想到只是一道加了一行状态判断的状压DP而已 与普通状压并无多大区别 详细见代码 代码 #include<iostream> using namespace std; #define maxn 1...

214

luogu P2704【NOI2001】 & SSL1384 炮兵阵地【状压DP】

状压DP 解题思路 首先对高山和平原做一个预处理, 再枚举i(1,2<<n)i(1,2<<n)i(1,2<<n),将二进制数存在 a[i]a[i]a[i] 里,将兵数存在 num[i]num[i]num[i] 里。 然后开始DP 设 f[i][l][k]f[i][l][k]f[i][l][k] 表示当前 iii 点有 jjj 个炮兵,iii 的上一行有 kkk 点贡献。 则转移方程为 f[i][l][k]=max⁡(f[i][l][k],f[i−1][k][j]+num.

JA_yichao欢迎你 cnblogs账号:https://www.cnblogs.com/mayichao/ 225

P2704 [NOI2001]炮兵阵地[状压dp]

题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队。一个NM的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区...

weixin_30396699的博客 75

P2704 [NOI2001] 炮兵阵地(状压dp)

[NOI2001] 炮兵阵地 - 洛谷https://www.luogu.com.cn/problem/P2704今天又是学习状压dp的一天!这题的数据范围很明显可以用状压dp来写,上手就应该想到dp数组中有两维是第i行和第i行的状态,但炮兵的影响有两行,所以还要记录上一行的状态。可以先把每一行可行的方案数求出来再枚举,可以节省点时间,有些题可能会卡掉。...

Ghostttttttiii的博客 312

状压dp经典题 POJ 1185///洛谷P2704 [NOI2001]炮兵阵地

状压dp经典题 [NOI2001]炮兵阵地 题目链接: POJ 1185 or 洛谷P2704 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=70; //经过预处理后最多可达到的状态数,这个数可以通过打表计算 using n...

dominicwilson的博客 186

洛谷 P2704 [NOI2001]炮兵阵地 (状压DP)

状压DP,用 dp[i][j][k]dp[i][j][k]dp[i][j][k] 表示前一行状态为 iii ,当前行状态为 jjj,当前处于 kkk 行时对应的最大放置数。 #include<iostream> #include<cstdio> #define MAXN (1<<10) using namespace std; // f[i][j][k] 表示上一行状态为 i,这一行状态为 j,当前行为第 k 行时可以放的最多的个数 char x;int n,m,a[10

wineandchord 176
上一篇: P1220 关路灯 (区间dp)
下一篇: 校赛题解
ttoobne
博客等级 码龄9年 13粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值