poj 1185 状态压缩dp(炮兵阵地)

POJ 1185 炮兵阵地 (经典状态压缩题) 炮兵阵地(POJ 1185) Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 30481 Accepted: 11762 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用”H” 表示),也可能是平原(用”P... 阅读详情

题意:司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示)。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一个炮兵部队攻击到的区域:沿横向左右各两格,沿纵向上下各两格。炮兵的攻击范围不受地形的影响。 现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。

思路:dp[i][j][k]表示第i行布局为j,第i-1行布局为k时,前i行的最多炮兵数目。1、j,k这两种布局必须相容。否则 dp[i][j][k] = 0;2、 dp[i][j][k] = max{dp[i-1][k][m], m = 0...1023} + Num(j),Num(j)为布局j中炮兵的数目,且j和m必须相容。此时满足无后效性。

初始条件:
dp[0][j][0] = Num(j)
dp[1][i][j] = dp[0][j][0] + Num(i);

这样一来需要开100*1024*1024大的数组,不能承受。注意到每一行里最多能放4个炮兵。就算全是平地,能放炮兵的方案数目也不超过 60 (用一遍dfs可以全部求出)。算出一行在全平地情况下所有炮兵的排列方案,存入数组state[65],那么int dp[100][70][70] 足矣。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 105
#define M 65
int n,m,mm;
int state[65],w[65],num = 0;
int dp[N][M][M],t[105];
char s[105][15];
int flag[15];
void dfs(int d){
    int i,j = 0,sum=0;
    if(d == m){
        for(i = 0,j=m-1;j>=0;j--){
            i <<= 1;
            if(flag[j] == 1){
                i++;
                sum++;
            }
        }
        state[num] = i;
        w[num++] = sum;
        return ;
    }
    dfs(d+1);
    if((d>=2&&!flag[d-1]&&!flag[d-2])||(d==1&&!flag[d-1])||!d){//因为两个大炮之间至少隔两个地方不能放东西
        flag[d] = 1;
        dfs(d+1);
        flag[d] = 0;
    }
}
int main(){
    int i,j,k,a,res=0;
    scanf("%d %d",&n,&m);
    for(i = 0;i<n;i++)
        scanf("%s",s[i]);
    for(i = 0;i<n;i++)
        for(j = 0;j<m;j++){
            t[i] <<= 1;
            t[i] += (s[i][j]=='P');
        }
    memset(dp, 0, sizeof(dp));
    memset(flag,0,sizeof(flag));
    dfs(0);//搜索一行中能够成立的所有状态,存入state数组
    for(i = 0;i<num;i++)
        if(!(state[i] & (~t[0])))
           dp[0][i][0] = w[i];
    for(i = 0;i<num;i++)
        for(j = 0;j<num;j++)
            if(!(state[i] & state[j]) && !(state[i] & (~t[1])))
                dp[1][i][j] = dp[0][j][0]+w[i];
    for(i = 2;i<n;i++)
        for(j = 0;j<num;j++){
            if(state[j] & (~t[i]))
                continue;
            for(k = 0;k<num;k++){
                if(state[j] & state[k])
                    continue;
                for(a = 0;a<num;a++)
                    if(!(state[j]&state[a]))
                        dp[i][j][k] = max(dp[i][j][k],w[j]+dp[i-1][k][a]);
            }
        }
    for(i = 0;i<num;i++)
        for(j = 0;j<num;j++)
            res = max(res,dp[n-1][i][j]);
    printf("%d\n",res);
    return 0;
}


Ubuntu22.04安装ros(一键搞定) 然后发现可以一键安装,话不多说,直接终端输入如下指令。回车之后系统会自动安装ros。 阅读详情

相关推荐

Vmware安装windowsServer2022版本

全网最详细的Vmware安装windowsServer2022版本

A乐神的博客 7010

状态压缩 -- POJ 1185 炮兵阵地【状态压缩DP】

POJ 1185 炮兵阵地 核心算法:dp状态压缩中文题分析: graph[i]存储第i行的地形,用一二进制数表示,山地对应位置为1,平地对应位置为0leg[N]中存放所有能够合法的单行安排状态,用二进制数表示,驻兵对应位置为1,不驻兵对应位置为0dp[i][j][k]表示第i行状态为j,i-1行状态为k时最多的哨兵数目,j,k均对应leg[]中状态 dp[i][cur][p1] ...

a48634331的博客 161

Unity 实现动态网格地图生成与交互组件

本文详细介绍了在Unity中实现动态网格地图生成与交互组件的完整方案。从基础网格单元实现到高级交互功能,涵盖网格生成器核心逻辑、事件驱动架构、性能优化技巧以及六边形网格等特殊实现。特别适合游戏开发者学习如何构建战棋、模拟经营类游戏的可交互地图系统,提升开发效率与用户体验。

weixin_29015483的博客 1068

poj1185 炮兵阵地 经典状态压缩dp

poj1185 炮兵阵地 经典状态压缩dp 状态dp,用二进制位来表示当前的一个状态值,只不过比上一个稍微复杂了一点,需要用三维的数组来保存当前state。 题目:在一个N*M的矩阵上布置炮兵部队,只有平原可以布置,然后每个炮兵部队都有一个攻击范围,它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。 问:如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何...

pcfbyssz的博客 253

STM32驱动数码管:从硬件连接到动态显示实现

本文详细介绍了使用STM32单片机驱动数码管的完整流程,从硬件连接到软件实现。内容涵盖共阳/共阴数码管原理、GPIO配置、段码表生成,并重点解析了多位数码管动态显示的核心技术,包括动态扫描原理、消影处理及实战代码,帮助开发者快速掌握这一嵌入式开发基础技能。

p5l2m9n4o6q的博客 575

Ubuntu20.04安装Eigen3.3.7、模板类Sophus和Ceres

Sophus的使用必须依赖3.3以上的Eigen版本。如果版本太低,Sophus库将无法安装使用。

qq_62964142的博客 3422

状态压缩dp入门题 POJ 1185 炮兵阵地

  POJ 1185 炮兵阵地   中文题,题意不再赘述。   解法:从题目可以知道,每一行的状态只与前两行有关。已知N < 100, M <= 10。很明显的可以把M压缩,把M中的每一个位置的状态可以用0,1表示。所以M的总状态可以用长度为M的二进制转化成的十进制数表示。计算可以发现总的合法状态并不多,因为要保证同一行的两个士兵不能相互攻击到。 求合法状态的关键代码: R...

weixin_30667649的博客 92

新能源汽车动力总成研发测试技术全景深度报告(2025版)

本文所有企业案例数据均来自上市公司财报、工信部备案信息及权威媒体报道,技术参数经第三方检测报告交叉验证。研发测试人员能力矩阵重构(T型人才进阶路径)[10] 全球动力总成市场2035年预测报告。[9] NI电动汽车HIL测试架构技术文档。[3] 东风汽车智能化研发体系深度报告。[5] 混合动力测功机发明专利技术细节。[1] 领克动力总成试验中心技术解析。[7] 新能源汽车产业迭代趋势白皮书。测试架构师-数字工程。测试架构师-安全合规。测试架构师-人工智能。

优快云-新能源汽车研发测试专业博主 777

POJ 1185 炮兵阵地(状态压缩DP)

题目链接:POJ 1185 炮兵阵地 状压DP第二题。。摸索中。。

fobdddf的专栏 547

一文吃透 Tools for Applying SAP Notes:从 SNOTE、TCI 到 Solution Manager 与 SAP Cloud ALM

本文系统梳理了SAP技术与运维团队应用SAP Notes的高效工具与方法,涵盖On-Premise与云环境。文章首先阐述了精研SAP Notes工具的必要性,指出其是实施错误修复、法务变更和性能改进的关键载体。随后详细介绍了SNOTE、TCI、Solution Manager、Cloud ALM和Maintenance Planner等核心工具的定位与适用场景,并通过采购异常案例展示了标准更正流程。针对复杂修复场景,文章提出了TCI的批量处理方案,并强调将Note实施纳入变更治理流程的重要性。最后总结了三种

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

矢量网络分析仪校准:原理、方法与系统适配性

矢量网络分析仪(VNA)校准是射频测量的关键环节,通过误差建模(12项误差项)和标准件测量,可将系统不确定度从±5dB降至±0.1dB以下。主流校准方法包括SOLT(适用于同轴系统)和TRL(适用于波导系统),二者在标准件、误差重点及频率上限等方面存在显著差异。随着6G与量子通信的发展,动态实时校准将成为新趋势。工程师需根据传输结构、频率范围及精度需求选择合适方法,确保测量精度。

u014344410的博客 262

poj 1185 炮兵阵地 【状态压缩dp】

原题链接 poj 1185 炮兵阵地        由于每行只有十个可以考虑用状态压缩,又由于每行两炮之间不能小于2,故可以先计算出,最多不会超过60种 状态,可以先存下这些状态(f[]),然后存下每种状态的炮阵地数量(num[]),用dp[][][];  状态转移公式 dp[i][j][k]=num[j]+max(dp[i-1][k][t])(其中j与k相符,j与t也要相符) (ps:相符

smallfish的专栏 515

Python量化- Black-Litterman 模型

​​​​​​​Black-Litterman 模型由 Fischer Black 和 Robert Litterman 于 1992 年开发,采用贝叶斯方法进行资产配置。该模型通过结合先前的回报估计(可以从多个来源得出)并结合投资者对未来回报的独特预期来优化分配权重。

探索人工智能领域 1030

poj 1185 炮兵阵地 状态压缩DP

第一道状态压缩DP,只能处理小规模的数据,大规模数据会爆时间,充分利用位运算。 //============================================================================ // // > File : poj1185.cpp // > Author : flowertree //

260

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

POJ3254 Corn Fields + POJ1185 炮兵阵地 状态压缩DP

都说这是两道状压DP的入门题emmmmm...搞了一下午好像明白了点???   1.POJ3254 Corn Fields  先贴大佬博客Orz:https://blog.youkuaiyun.com/harrypoirot/article/details/23163485 讲的已经很好很详尽了Orz,我代码里的注释也基本仿照该博客的,膜拜三连Orz 直接上AC代码吧,以后还是要多翻回来看看。 ...

A confused programmer 445

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

状态压缩DP POJ 1185 炮兵阵地

【题目链接】http://poj.org/problem?id=1185 【题目大意】在平原(P)上可以布置一支炮兵部队,而在山地(H)上不能够部署炮兵部队。而且每两个炮兵之间的间隔(横纵)要大于等于 2,求最多能够摆放多少的炮兵部队。 【解题思路】经典状态压缩DP。每行炮兵的状态 i,只与i-1,和i-2行状态有关。若用0表示此处不能放,1表示能放。则根据题意可知:1、有些地

Christine的专栏 1038

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

POJ1185 炮兵阵地 (状态压缩DP)

炮兵阵地Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 24698 Accepted: 9531Description司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。

松子茶的专栏 1010

poj 1185 炮兵阵地 (状态压缩dp)

题目链接 如果你是刚刚开始做状态压缩dp,我建议你先看看 poj 3254 Corn Fields 这是一道比这一题更简单,更容易入门的题目。 还有在代码中我用了一个很巧妙的方法求一个数二进制数中1的个数 具体请看我博客中 x& (x - 1)==0这篇文章 链接 。 还有一点,不同于poj 3254的地方,我们不能直接枚...

166

POJ1185炮兵阵地(状态压缩DP)

题目链接:http://poj.org/problem?id=1185 二进制存储每一行的状态,1表示可以放炮兵,0表示不可以放炮兵。 处理出数组 stk[i] ,表示第 i 种炮兵之间距离不小于2的所有的方案,保证炮兵之间不能横向攻击。 处理出数组 num[i],表示状态 stk[i] 中的炮兵数量。 处理出数组 cur[i],表示第 i 行高地的位置,1表示有高地,0表示无高地。

qust1508060414的博客 855

POJ 1185 状态压缩DP 炮兵阵地

题目直达车: POJ 1185 炮兵阵地 分析: 列( <=10 )的数据比较小, 一般会想到状压DP. Ⅰ、如果一行10全个‘P’,满足题意的状态不超过60种(可手动枚举)。 Ⅱ、用DFS搜出所有可能表示状态的整数(二进制1表示可以放,0则不能)。 Ⅲ、对每一行的地行进行状态处理(p[i]表示第i行地形的状态),二进制‘H’转1,‘P’转0; Ⅳ、用dp[i][j...

weixin_30455067的博客 143

POJ 1185 炮兵阵地 (状态压缩,DP,附测试数据)

话说POJ的这道题弱数据,网上的许多解题报告也有问题。。今天训练赛出了这道题,信心满满的拿原来的AC代码去交,WA+RE的体无完肤。。解题报告附上,慢慢研究! 经典NOI题,矩阵里的状态压缩问题。因为m,而每列都有状态选或不选,所以想到用2进制,那么状态数是2^10。因为当前行的选择依赖于前两行,而前一行又依赖于前前两行,能想到状态转移方程应该牵扯到当前行、前一行、前前行,类似于递推式dp[i]

梦世界 winkloud 1567

【DP|状态压缩+预处理】POJ-1185 炮兵阵地

给出地图,上面有些位置可以防止大炮,有些不能放,大炮可以攻击其上下左右两个格子的距离,要使大炮不互相攻击,最多可以安放多少门大炮。

JSure的代码库 1202

poj 1185 状态压缩dp-炮兵阵地

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

geekword的专栏 451

POJ 1185 炮兵阵地 状态压缩DP

炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27638 Accepted: 10706 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成

I'm Growing 955

POJ 1185 炮兵阵地(状态压缩dp)

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

Chunzhen的博客 2752
上一篇: poj 1037 dp+排列计数(美妙的栅栏)
下一篇: poj 2777 线段树(区间染色)
dumeichen
博客等级 码龄13年 55粉丝 475原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值