当前位置: 首页 > news >正文

POJ 1185 炮兵

是中国标题。大家都说水问题。但是,良好的1A它?

标题效果:

给出n*m的矩阵,当某个单元格有炮兵部队时它的上下左右两格(不包含斜着的方向)是这支部队的攻击范围。问在两支部队之间不可能相互攻击到的情况下。最多能部署多少炮兵部队。


解题思路:
状态压缩DP,DP[i][j][k]代表当第i行是第j种状态时。第i-1行是第k种状态时,布置炮兵的最大数量。

状态能够预先处理出来,仅仅有60种。



以下是代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <stdlib.h>
using namespace std;
int min(int a,int b)
{
    if(a>b)a=b;
    return a;
}
int max(int a,int b)
{
    if(a<b)a=b;
    return a;
}
int n,m,vaild[65],cn[65],cnt;
void judge()
{
    int p,num;
    cnt=0;
    for(int i=0; i<1<<10; i++)
    {
        if(((i<<1)&i)||((i<<2)&i))
        {
            continue;
        }
        int temp=i;
        while(temp)
        {
            if(temp%2)cn[cnt]++;
            temp>>=1;
        }
        vaild[cnt++]=i;
    }
}
int place[105];
char s[15];
int dp[105][65][65];
int main()
{
    judge();
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        int ans=0;
        for(int i=1; i<=n; i++)
        {
            scanf("%s",s);
            place[i]=0;
            for(int j=0; j<m; j++)
            {
                place[i]<<=1;
                if(s[j]=='H')
                {
                    place[i]++;
                }
            }
        }
        memset(dp,0,sizeof(dp));
        for(int i=1; i<=n; i++)
        {
            if(i==1)
            {
                for(int j=0; vaild[j]<1<<m&&j<cnt; j++)
                {
                    if((place[1]&vaild[j])==0)
                    {
                        dp[1][j][0]=cn[j];
                    }
                    ans=max(ans,dp[1][j][0]);
                }
            }
            else if(i==2)
            {
                for(int j=0; vaild[j]<1<<m&&j<cnt; j++)
                {
                    if((place[2]&vaild[j])==0)
                    {
                        for(int k=0; vaild[k]<1<<m&&k<cnt; k++)
                        {
                            if((vaild[k]&vaild[j])==0&&(place[1]&vaild[k])==0)
                            {
                                dp[2][j][k]=dp[1][k][0]+cn[j];
                            }
                            ans=max(ans,dp[2][j][k]);
                        }
                    }

                }
            }
            else
            {
                for(int j=0; vaild[j]<1<<m&&j<cnt; j++)
                {
                    if((place[i]&vaild[j])==0)
                    {
                        for(int k=0; vaild[k]<1<<m&&k<cnt; k++)
                        {
                            if((vaild[k]&vaild[j])==0&&(place[i-1]&vaild[k])==0)
                            {
                                for(int l=0;vaild[l]<1<<m&&l<cnt;l++)
                                {
                                    if((vaild[k]&vaild[l])==0&&(vaild[j]&vaild[l])==0&&(place[i-2]&vaild[l])==0)
                                    {
                                        dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][l]+cn[j]);
                                    }
                                }
                            }
                            ans=max(ans,dp[i][j][k]);
                        }
                    }
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}


相关文章:

  • 【转】一步一步学Linq to sql(一):预备知识
  • ios5 编程关于@synthesize window = _window的理解
  • iOS UI基础-18.0 UIView
  • [你必须知道的.NET]第十四回:认识IL代码---从开始到现在
  • AMD规范与CMD规范的区别是什么?
  • 第二十一章流 6检查文件是否打开
  • 真心想学C语言
  • javabean的内省技术和BeanUtils的使用
  • 使用Google的项目(源码)托管服务(转)
  • vSphere 5.5 VM 整合磁盘失败
  • 人为漏洞的构造、文件的载入、验证机制的突破
  • _____异或运算_________________________2095_____________________________________________
  • 一款基于Java的web快速开发平台,很给力!
  • Effective C++ :模板类之间的继承.
  • 关于CSS权重问题
  • Angular2开发踩坑系列-生产环境编译
  • ERLANG 网工修炼笔记 ---- UDP
  • Java超时控制的实现
  • Java多态
  • Laravel 中的一个后期静态绑定
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Webpack入门之遇到的那些坑,系列示例Demo
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 半理解系列--Promise的进化史
  • 坑!为什么View.startAnimation不起作用?
  • 力扣(LeetCode)357
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 问题之ssh中Host key verification failed的解决
  • 线性表及其算法(java实现)
  • 新书推荐|Windows黑客编程技术详解
  • 怎么把视频里的音乐提取出来
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转) ns2/nam与nam实现相关的文件
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET Micro Framework初体验(二)
  • ::
  • @property括号内属性讲解
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ SNOI 2013 ] Quare
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [iOS开发]iOS中TabBar中间按钮凸起的实现
  • [JavaEE] 线程与进程的区别详解
  • [javaee基础] 常见的javaweb笔试选择题含答案
  • [javaSE] 数据结构(二叉查找树-插入节点)
  • [LeetCode]Reverse Linked List II
  • [linux] Key is stored in legacy trusted.gpg keyring
  • [WebUI Forge]ForgeUI的安装与使用 | 相比较于Auto1111 webui 6G显存速度提升60-75%
  • [windows phone 7开发]搭建WP7开发环境