热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【状压dp】hdu4539郑厂长系列故事——排兵布阵

hdu4539郑厂长系列故事——排兵布阵http:acm.hdu.edu.cnshowproblem.php?pid4539问题描述:给你一个n行m列的0-1矩阵,0表示不

hdu 4539 郑厂长系列故事——排兵布阵

http://acm.hdu.edu.cn/showproblem.php?pid=4539

问题描述:给你一个n行m列的0-1矩阵,0表示不能安置炮兵,1可以安置炮兵,要求炮兵的曼哈顿距离为2的位置不能有其他炮兵,问最多可安置炮兵的数目

思路: 状态压缩+位运算+动态规划

基本思路参考上一题

http://blog.csdn.net/u012717411/article/details/48898019

与上一题的区别在于曼哈顿距离为2,第i-1层对角线不能重复,第i-2层正对的不能重复,全部通过位运算解决,很好想,会前一题直到题就很简单,注意先把所有情况属枚举一遍确定范围,避免爆内存。


参考代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define eps 1e-9
#define pi acos(-1)
#define long long ll
#define M 10
#define N 110

using namespace std;

const int _max = 170 + 10;//最多可能状况不超169种,太大或MLE
const int mod = 1e8;

int x,n,m,row[N],top,st[_max];

int dp[N][_max][_max],cnt[_max];


bool judge(int x,int j){//自身地形合适
int y = st[j];
if(y&~x) return false;
return true;
}

void init(){//状态压缩
top=0;
for(int i = 0; i <(1< if(i&(i<<2)) continue;
st[++top] = i;
int t = i,res = 0;;
while(t){
if(t&1) res++;
t>>=1;
}
cnt[top] = res;
}
}

int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif // ONLINE_JUDGE
while(~scanf("%d%d",&n,&m)){
for(int i = 1; i <= n; ++ i){
row[i] = 0;
for(int j = 1; j <= m; ++ j){
scanf("%d",&x);
row[i]=(row[i]<<1)+x;
}
}
init();
memset(dp,0,sizeof(dp));
for(int i = 1; i <= top;++ i)
if(judge(row[1],i)) dp[1][i][1] = cnt[i];
//dp
for(int i = 2; i <= n; ++ i)
for(int j = 1; j <= top; ++ j){
if(!judge(row[i],j)) continue;//自己行地形合适
for(int k =1; k<= top; ++ k){//i-1行状态
if(st[j]&(st[k]<<1)) continue;
if(st[j]&(st[k]>>1)) continue;
for(int p = 1; p <= top; ++ p){//i-2行状态
if(st[j]&st[p]) continue;
if(st[k]&(st[p]<<1)) continue;
if(st[k]&(st[p]>>1)) continue;
dp[i][j][k] = max(dp[i][j][k],dp[i-1][k][i==2?1:p]+cnt[j]);
}
}

}
int tar = -1;
for(int i = 1; i <= top; ++ i)
for(int j = 1;j <= top; ++ j)
if(tar printf("%d\n",tar);
}
return 0;
}
  • 加粗 Ctrl + B
  • 斜体 Ctrl + I
  • 引用 Ctrl + Q
  • 插入链接 Ctrl + L
  • 插入代码 Ctrl + K
  • 插入图片 Ctrl + G
  • 提升标题 Ctrl + H
  • 有序列表 Ctrl + O
  • 无序列表 Ctrl + U
  • 横线 Ctrl + R
  • 撤销 Ctrl + Z
  • 重做 Ctrl + Y

推荐阅读
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
author-avatar
ya的sky
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有