郑厂长系列故事——排兵布阵 hdu4539(状态压缩DP)

时间:2022-03-19 09:02:11

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

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 1509    Accepted Submission(s): 554

Problem Description
  郑厂长不是正厂长
  也不是副厂长
  他根本就不是厂长
  事实上
  他是带兵打仗的团长

  一天,郑厂长带着他的军队来到了一个n*m的平原准备布阵。
  根据以往的战斗经验,每个士兵可以攻击到并且只能攻击到与之曼哈顿距离为2的位置以及士兵本身所在的位置。当然,一个士兵不能站在另外一个士兵所能攻击到的位置,同时因为地形的原因平原上也不是每一个位置都可以安排士兵。
  现在,已知n,m 以及平原阵地的具体地形,请你帮助郑厂长计算该阵地,最多能安排多少个士兵。

 
Input
输入包含多组测试数据;
每组数据的第一行包含2个整数n和m (n <= 100, m <= 10 ),之间用空格隔开;
接下来的n行,每行m个数,表示n*m的矩形阵地,其中1表示该位置可以安排士兵,0表示该地形不允许安排士兵。
 
Output
请为每组数据计算并输出最多能安排的士兵数量,每组数据输出一行。
 
Sample Input
6 6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
 
Sample Output
2
 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
int a[][],n,m,zh,b[],dp[][][];
bool check(int x,int y)
{
int x1=x<<,x2=x>>;
if(y&x1)return ;
if(y&x2)return ;
return ;
}
bool check1(int x,int y)
{
if(x&y)return ;
return ;
}
bool check2(int x,int y)
{
int z=x|y;
if(z>y)return ;
return ;
}
int fun(int x)
{
int s=;
while(x)
{
s+=x&;
x>>=;
}
return s;
}
void init()
{
zh=;
for(int i=; i<(<<m); i++)
{
if(!(i&(i<<)))
{
a[][zh]=i;
a[][zh++]=fun(i);
}
}
}
int main()
{ while(~scanf("%d%d",&n,&m))
{
init();
int i,j,x,k,r;
memset(dp,,sizeof(dp));
x=getchar();
for(i=; i<n; i++)
{
b[i]=;
for(j=; j<m; j++)
{
x=getchar();
b[i]=(b[i]<<)+x-'';
x=getchar();
}
}
int ix,iy;
for(i=; i<n; i++)
{
ix=i&,iy=!ix;
for(j=; j<zh; j++)
{
if(check2(a[][j],b[i]))
if(!i)
{
dp[][][j]=a[][j];
}
else if(i==)
{
for(k=; k<zh; k++)
{
if(check(a[][k],a[][j]))
dp[][k][j]=dp[][][k]+a[][j];
}
}
else
{
for(k=; k<zh; k++)
{
if(check(a[][k],a[][j]))
{
for(r=; r<zh; r++)
{
if(check1(a[][r],a[][j]))
dp[ix][k][j]=dp[ix][k][j]>dp[iy][r][k]+a[][j]?dp[ix][k][j]:dp[iy][r][k]+a[][j];
}
} }
}
}
}
int sum=;
for(i=; i<zh; i++)
for(j=; j<zh; j++)
sum=sum>dp[ix][i][j]?sum:dp[ix][i][j];//,cout<<dp[1][i][j]<<" ";
printf("%d\n",sum);
}
}

郑厂长系列故事——排兵布阵 hdu4539(状态压缩DP)的更多相关文章

  1. HDU-4539郑厂长系列故事——排兵布阵(状态压缩,动态规划)

    郑厂长系列故事--排兵布阵 Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total ...

  2. HDU 4539郑厂长系列故事&horbar;&horbar;排兵布阵(状压DP)

    HDU 4539  郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 //#pragma co ...

  3. hdu4539 郑厂长系列故事——排兵布阵 &plus; POJ1158 炮兵阵地

    题意:                  郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32 ...

  4. HDU 4539 郑厂长系列故事——排兵布阵

    http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others) ...

  5. HDU 4539 郑厂长系列故事——排兵布阵 状压dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/O ...

  6. HDU 4539 郑厂长系列故事——排兵布阵 —— 状压DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Ot ...

  7. POJ 1185 - 炮兵阵地 &amp&semi; HDU 4539 - 郑厂长系列故事——排兵布阵 - &lbrack;状压DP&rsqb;

    印象中这道题好像我曾经肝过,但是没肝出来,现在肝出来了也挺开心的 题目链接:http://poj.org/problem?id=1185 Time Limit: 2000MS Memory Limit ...

  8. 状态压缩 HDU4539 郑厂长系列故事——排兵布阵

    多组n *m 0不能放1可以放 每个士兵可以攻击到并且只能攻击到与之曼哈顿距离为2的位置以及士兵本身所在的位置. #include<stdio.h> #include<algorit ...

  9. HDU 4539 郑厂长系列故事&horbar;&horbar;排兵布阵&lpar;曼哈顿距离&rpar;

    这虽然是中文题,然而没看懂,不懂的地方,就是在曼哈顿距离这块,网上搜索了一下,写了个程序,是测试曼哈顿距离的. 曼哈顿距离:两点(x1,y1)(x2,y2)的曼哈顿距离为|x1-x2|+|y1-y2| ...

随机推荐

  1. TYVJ P1080 N皇后

    描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 列号  1  2  3  4  5  6 -- ...

  2. mysql 定时任务

    mysql 5.1以上支持定时任务. SHOW VARIABLES LIKE 'event_scheduler';   检查是否已开启该功能 开启计划任务功能: SET GLOBAL event_sc ...

  3. Nodejs&&num;183&semi;理解Buffer

    Node里面的Buffer其实就是用于网络请求.文件读取等等操作,而且是分配在堆外,不会占用堆内的内存,这也是因为本来V8的内存就很小,如果读取大文件,那就...... 之前有看过Logstash的B ...

  4. 已知2个一维数组:a&lbrack;&rsqb;&equals;&lbrace;3&comma;4&comma;5&comma;6&comma;7&rcub;,b&lbrack;&rsqb;&equals;&lbrace;1&comma;2&comma;3&comma;4&comma;5&comma;6&comma;7&rcub;;把数组a与数组b 对应的元素乘积再赋值给数组b,如:b&lbrack;2&rsqb;&equals;a&lbrack;2&rsqb;&ast;b&lbrack;2&rsqb;;最后输出数组b的元素。

    package hanqi; import java.util.Scanner; public class Test7 { public static void main(String[] args) ...

  5. div滚动到页面顶端后固定住

    <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title> ...

  6. C&num; 字符串计算表达式

     C#  字符串计算表达式 string str="4+4+2.1"; 要的效果: double sum=4+4+2.1: 方案一: 动态计算表达式: 1 public class ...

  7. 国内静态文件CDN服务介绍 国内js公共库

    国内静态文件CDN服务介绍 新浪SAE  介绍页 文件页 百度云 介绍页 七牛云存储介绍页 优势,可以提交没有的库,支持https,但证书不可信. 又拍云 介绍页 建议使用阿里云OSS自己上传所需文件 ...

  8. Android中的pix&comma;sp&comma;dp相关概念

    px( pixel) 像素,可以简单的理解为一个点或方块,用以颜色的显示(单位),一般指印刷品或屏幕设置设备的颜色显示定义. dip(device independent pixels)设备独立像素. ...

  9. 关于Go语言共享内存操作的小实例

    <strong style="margin: 0px; padding: 0px; border: 0px; font-size: 15px; font-weight: bold; c ...

  10. Leetcode 326&period;3的幂 By Python

    给定一个整数,写一个函数来判断它是否是 3 的幂次方. 示例 1: 输入: 27 输出: true 示例 2: 输入: 0 输出: false 示例 3: 输入: 9 输出: true 示例 4: 输 ...