【POJ1185】【洛谷P2704】炮兵阵地【状压dp】

P2704 炮兵阵地 (状压dp入门题) 题解 题意简述:给定一个大小为n*m的棋盘,棋盘上'H'表示不可放置,'P'表示可放置,一个棋子在棋盘上的攻击范围是其左右上下2格以内,求不冲突情况下的最多摆放棋子数。 分析:决策是对于一个P格子考虑放或不放,因为棋盘是二维的,所以考虑状压,其中m<=10,所以对行状压,那么可用f[i]表示前i行的最多摆放棋子数,但考虑到第i行的摆放决策取决于i-2、i-1行的摆放情况,因此需要给f增加两维,即用f[i][j][k]表示摆放前i行,并以j和k作为结尾的两行的最大棋子数,于是状态转移方程为:f[i][j][ 阅读详情

题目大意:

题目链接:

POJ:http://poj.org/problem?id=1185
洛谷:https://www.luogu.org/problemnew/show/P2704

在一个 n × m n\times m n×m的网格中,有些格子可以选择,任意两个选择的点不可以在同一直线的距离小于3。求最大的选择方案。


思路:

m ≤ 10 m\leq 10 m≤10,可以考虑状压 d p dp dp。
由于对于一个点选择或者不选会影响到下面两行的选择,所以我们可以设 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示第 i i i行,这一行和上一行的放置方案为 j j j和 k k k的方案数。设上上行的状态为 l l l,则有
f [ i ] [ j ] [ k ] = m a x ( f [ i ] [ j ] [ k ] , f [ i − 1 ] [ k ] [ l ] + s u m [ j ] ) f[i][j][k]=max(f[i][j][k],f[i-1][k][l]+sum[j]) f[i][j][k]=max(f[i][j][k],f[i−1][k][l]+sum[j])
其中 s u m [ j ] sum[j] sum[j]表示状态为 j j j放置的个数(即状态为 j j j中数字1的个数)
但是这样的时间复杂度为 O ( n × ( 2 m ) 3 ) O(n\times (2^m)^3) O(n×(2m)3),空间复杂度为 O ( n m 2 ) O(nm^2) O(nm2),TLE+MLE两开花(TM两开花XD)。
我们会发现枚举时有太多状态是不成立的。也就是说这个状态中就有两个1之间的距离小于3,。所以我们可以预处理出所有的合法的状态(即任意两个1之间的距离至少为3),然后直接枚举这些状态(顺便预处理出 s u m sum sum数组)。
这样可以省去超级多的无用状态,大大减少时间复杂度。
然后我们为了减少空间,可以设 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示第 i i i行,这一行的状态是第j个合法的状态,上一行的状态是第k个合法的状态时的最多放置方案数。方程没有怎么变。
这样就可以过掉本题了。


代码:


#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;

const int N=110;
const int MAXN=(1<<10);
int n,m,maxn,map[N],q[MAXN],sum[MAXN],tot,ans;
char ch;

bool check(int x)  //判断这个状态是否合法
{
	int cnt=0,sum;
	while (x)
	{
		if ((x&1)&&cnt) return 0;
		if (x&1) cnt=3;
		if (cnt) cnt--;
		x>>=1;
	}
	return 1;
}

int count(int x)  //计算这个撞他中有几个1(您强可以使用lowbit)
{
	int cnt=0;
	while (x)
	{
		cnt+=(x&1);
		x>>=1;
	}
	return cnt;
}

int main()
{
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
		{
			cin>>ch;
			map[i]=(map[i]<<1)+(ch=='H');  //压缩这一行的那些位置可以放
		}
	maxn=(1<<m);
	for (int S=0;S<maxn;S++)  //预处理
		if (check(S)) 
		{
			q[++tot]=S;
			sum[tot]=count(S);
		}
	int f[N][tot+1][tot+1];  //压缩空间复杂度
	memset(f,0,sizeof(f));
	for (int i=1;i<=n;i++)
		for (int j=1;j<=tot;j++)
			if (i==1||!(q[j]&map[i-2]))
				for (int k=1;k<=tot;k++)
					if (!(q[k]&map[i-1])&&!(q[j]&q[k]))
						for (int l=1;l<=tot;l++)
							if (!(q[l]&map[i])&&!(q[j]&q[l])&&!(q[k]&q[l]))
								f[i][l][k]=max(f[i][l][k],f[i-1][k][j]+sum[l]);
	for (int i=1;i<=tot;i++)
		for (int j=1;j<=tot;j++)
			ans=max(ans,f[n][i][j]);
	printf("%d",ans);
	return 0;
}
量化实战:如何用Barra多因子模型给你的投资组合做一次‘风险体检’? 本文详细介绍了如何利用Barra多因子模型对投资组合进行全面的风险体检,帮助投资者识别行业和风格因子的风险暴露。通过实战案例和Python代码示例,展示了数据采集、风险归因和组合优化的完整流程,提升投资组合的风险调整收益。 阅读详情

相关推荐

ADS交叉耦合振荡器VCO仿真

本文主要参考视频中如何使用进行ADS交叉耦合振荡器仿真和分析,由于视频中有诸多错误和视频清晰度较低,虽然视频博主及时改正,为了节省学习时间,可以直接参考本文。

qq_32589131的博客 5424

炮兵阵地(经典状压dp)

https://cn.vjudge.net/contest/312853#problem/A 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: ...

永夜莫明的博客 828

HWSD全球土壤数据下载、处理与提取完整指南

全球尺度的科学研究与工程项目中,土壤数据是必不可少的基础底图,而HWSD(和谐世界土壤数据库)凭借其统一的分辨率与属性标准,成为农业区划、生态模型、土地利用变化和水资源评估等领域的通用数据源。深入理解其“栅格存编号、数据库存属性”的核心原理,是高效使用这套数据的关键。通过掌握MDB数据库结构、属性字段含义以及栅格与属性表的关联方法,研究者可以将原始数据转化为可用的研究底图。无论你是需要提取特定区域的土壤属性,还是进行面积统计与点位采样,合理的处理流程都能显著提升工作效率。本文从下载注册开始,一步步梳理数据清

weixin_29056781的博客 313

292 炮兵阵地(状态压缩dp)

1. 问题描述: 2. 思路分析: 3. 代码如下: python滚动数组优化: class Solution: # 判断当前是否存在位置是否存在两个连续的1或者三个连续的1 def check(self, sta: int, k: int): for i in range(k): if (sta >> i & 1) and (sta >> i + 1 & 1 or sta >> i

二哈 434

端侧部署与优化:让 AI 真正走进现实生活的关键技术

AI 的开发流程分为 “训练” 与 “推理” 两大阶段。在训练阶段,科研人员依托云端海量数据和高性能 GPU 算力,构建出精度优异的 AI 模型 —— 比如能识别 1000 种物体的图像分类模型、能理解人类语言的自然语言处理模型。但这些在云端 “战绩斐然” 的模型,若直接应用到现实场景中,却会面临三大 “落地困境”。从云端到端侧,从模型压缩到硬件适配,端侧部署与优化技术解决了 AI 落地的核心难题,让 AI 不再是实验室里的 “高精尖技术”,而是融入日常生活的 “实用工具”。

m0_63477749的博客 1052

多仓智能订单路由与动态优化方案设计

现在有很多商家会有多个仓库,并分布在不同的城市中,当用户下单后会根据商品库存及订单信息将订单分配到对应的仓库进行发货,如就近原则,本期基于多仓库设计一套订单路由方案,包含核心逻辑、规则优先级和实施方案,适用于多仓协同的订单自动分配场景

14年产品经理老兵,想把自己的经验及总结分享给大家,只讲思路及实操,不讲废话 2481

P2704 [NOI2001]炮兵阵地-动态规划,状压dp

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

LingFengGold 393

树莓派4B系统安装及SSH远程控制(简单易操作)

​自从2022年4月树莓派官网更新了RaspberryPiImager版本v1.7.2后,便不再支持自行建立ssh文件,并用默认用户名pi和密码raspberry的方式进行远程控制(亲测不行,输密码时一直access denied)。但是该版本软件提供了烧录系统前设置ssh用户及密码功能。本文记录了系统安装和SSH远程操作步骤。........................

机械人的代码路 5790

炮兵阵地 (POJ-1185)(状压DP)

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

菜鸡的博客 889

【COMSOL】修改内置物理场方程 模拟水沸腾的蒸汽泡运动

在COMSOL中通过弱贡献(weak contribution)节点,可以向任何内置模型方程中添加约束。这里,以模拟水沸腾的蒸汽泡运动为例,来讲一讲当我们研究的方程与模块方程不一样时,应该怎么增加新的贡献项。

u012161192的博客 9008

ONNX Runtime C# YOLO全链路压测:从300ms到22ms的15个底层优化技巧

摘要:本文分享了工业质检场景下C#调用YOLOv8s ONNX模型的性能优化实战经验。原始单帧推理耗时300ms无法满足产线需求,通过全链路分析定位瓶颈(预处理85ms、推理180ms、后处理30ms)。重点优化措施包括:使用OpenCVSharp CUDA加速预处理(85ms→12ms),开启ONNX Runtime ALL级别图优化,选用TensorRT执行提供程序(180ms→22ms),以及优化内存管理和线程调度。最终实现单帧总耗时22ms±2ms,GPU利用率提升至85%,完整满足产线120块板/

2601_94871597的博客 402

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

文章目录0. 前言1. 状压dp+棋盘式(基于连通性) 0. 前言 相关: [状压dp] 蒙德里安的梦想(模板题+状压dp) 强相关: [状压dp] 小国王(状压dp) 1. 状压dp+棋盘式(基于连通性) 327. 玉米田 [状压dp] 小国王(状压dp) 是井字形,本题是十字形。 思路: 状态定义: f[i][s]:所有 思路: 状压 dp,个人认为状态定义比较麻烦。剩下的就是简单的位运算。 尤其是最后一步的优化,是真的秀… 代码: #include <iostream&gt

Y-puyu 的博客 419

在 SAP ABAP 里可靠地对接 FTP 服务器:从连接、命令到传输与排错的完整实战

本文详细介绍了在SAP ABAP中实现FTP文件交换的完整技术方案。文章首先解析了FTP协议的双连接特性(控制连接与数据连接),强调保持控制连接的重要性。随后详细说明了ABAP中FTP操作的四步标准流程:建立连接(包含HTTP_SCRAMBLE加密)、执行命令、断开连接和关闭RFC通道。文章提供了实战案例代码,演示如何将FTP文件复制到应用服务器再读取进内表处理,特别指出后台作业与前台操作的关键差异。最后总结了常见错误排查要点,包括连接模型、路径设置和资源释放等问题。全文通过SAP标准函数模块的调用顺序、典

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 306

状压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

蓝牙模块HM-10手册

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

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

[luogu 2704][poj 1185] 炮兵阵地 {状态压缩dp}

题目 https://www.luogu.org/problemnew/show/P2704 解题思路 设f[i][j][k]表示目前为第i行,i−2行第j个合法状态,i−1行第k个合法状态设f[i][j][k]表示目前为第i行,i-2行第j个合法状态,i-1行第k个合法状态设f[i][j][k]表示目前为第i行,i−2行第j个合法状态,i−1行第k个合法状态时的炮兵总数。 f[i][l][k]...

Nowed 496

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【ACWing】292. 炮兵阵地

题目地址: https://www.acwing.com/problem/content/294/ 司令部的将军们打算在N∗MN*MN∗M的网格地图上部署他们的炮兵部队。一个N∗MN*MN∗M的地图由NNN行MMM列组成,地图的每一格可能是山地(用'H'表示),也可能是平原(用'P'表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围是其四个方向222格及以内。如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击

数学、算法爱好者的博客 394

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

炮兵阵地(状压dp)

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

二哈 1623

poj 1185 炮兵布阵

状态压缩DP(使用位运算加速) 这是个经典的状态压缩DP,为加深印象详细写写一下报告,由于是中文题目所以不说题意了 思考方法:首先,一个炮的攻击有两行,所以对于第i行来讲,i-1行和i-2行对它有影响,i-3行及以上的都没有影响了,所以我们要得到第i行的信息,只需要知道i-1和i-2的信息(最近有个体会,DP要找到什么因素影响了当前你要求的东西,有影响的我们就处理,没影响的我们不用管)。接着我...

weixin_34097242的博客 173

poj 1185

<br /> 炮兵阵地Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 9240 Accepted: 3270<br />Description司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: <br

志当存高远 1027

292.炮兵阵地(棋盘类状压dp)

292. 炮兵阵地 - AcWing题库 分析: 限制条件: 考虑上下 同一列两格内不能放 不能 (x>>i&1) && ((x>>(i+1)&1) || (x>>(i+2)&1)) 考虑左右 同一行两格内不能放 要满足 (a&c|a&b|c&b)==0 只能在平原上面放 状态表示:已经摆放完前i-1,且第i-2行与第...

qq12323qweeqwe的博客 559

POJ - 1185 炮兵阵地(状压dp)

题目链接:点击查看 题目大意:中文题,题意很清晰,不多赘述 题目分析:最基础的状压dp,需要考虑如何转移,因为每一个炸弹所涉及的范围都是上下左右两个格子,我们可以从第一行开始向下转移,这样某一行的状态就取决于前一行和前两行,所以我们的dp数组设置为3维即可,dp[i][j][k]代表的含义是第i行,当前行状态为j,前一行的状态为k时的最优解,这样我们最后在第n-1中寻找最大值即可。 接下来我...

Falcon的博客 448

poj 1185 炮兵阵地

poj 1185 炮兵阵地 刚刚学习状态压缩,看到这样的问题真的有些不知所措 所以看了大神的题解,得到了这种题的解题思路 这个题的状态就是每一行的炮兵阵地摆放不能相邻,或者仅隔一个位置 找出每一行的状态数最多是sum=60个左右(当列数为10时) 每一行的状态都受起那两行的状态影响,所以不难得出算法的时间复杂度为n*sum^3 /** 初学状态压缩 题目:poj 1185 炮兵阵地 解

mitic的博客 547

炮兵阵地(经典状压dp)(poj 1185) + 状压dp小技巧详解

炮兵阵地 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 22809   Accepted: 8829 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也

从前有一个博客 2307

炮兵阵地 状压DP

炮兵阵地 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 27477   Accepted: 10632 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可

田园园野的博客 454

炮兵阵地 (状压dp)

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

FIVE 883

炮兵阵地 状压dp

题目链接 //dp[x][y][z]:x表示当前的一行,y表示当前行的状态,z表示当前行的上一行状态 #include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;iostream&gt; #include&lt;algorithm&gt; using namespace std; int dp[110][100][100],num[10...

qq_41006240的博客 267
上一篇: 电子眼【树形dp】
下一篇: 【NOIP2017】【洛谷P3957】跳房子【单调队列优化dp】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值