• poj 1185 状态压缩


    炮兵阵地
    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 27926   Accepted: 10805

    Description

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

    如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。
    现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。

    Input

    第一行包含两个由空格分割开的正整数,分别表示N和M;
    接下来的N行,每一行含有连续的M个字符('P'或者'H'),中间没有空格。按顺序表示地图中每一行的数据。N <= 100;M <= 10。

    Output

    仅一行,包含一个整数K,表示最多能摆放的炮兵部队的数量。

    Sample Input

    5 4
    PHPP
    PPHH
    PPPP
    PHPP
    PHHP

    Sample Output

    6

    Source

    题意:给你一个m*n的矩阵 每一块 P代表平原 可以安放炮台 现在按照要求部署炮台 任意两个炮台之间的距离应当大于2 问最多能够安放多少个炮台
    题解:dp[i][j][l]  代表第i行部署状态为l 第i-1行部署状态位j的情况下的答案
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<algorithm>
     6 #include<map>
     7 #include<queue>
     8 #include<stack>
     9 #include<vector>
    10 #include<set>
    11 #define ll __int64
    12 #define mod 100000000
    13 using namespace std;
    14 int n,m;
    15 int a[70];
    16 int b[110];
    17 int dp[110][70][70];
    18 char w[105][105];
    19 int cnt=0;
    20 int bit[70];
    21 int fin (int x)
    22 {
    23     int jishu=0;
    24     while(x>0)
    25     {
    26         if(x%2==1)
    27             jishu++;
    28         x/=2;
    29     }
    30     return jishu;
    31 }
    32 bool check(int x)//判断每一行可行的部署方案
    33 {
    34     if(x&(x/2)) return false;
    35     if(x&(x/4)) return false;
    36     return true;
    37 }
    38 bool fun(int x,int k)//判断是否满足平原的要求
    39 {
    40     if(x&b[k]) return false;
    41     else return true;
    42 }
    43 int main()
    44 {
    45     scanf("%d %d",&m,&n);
    46     char exm;
    47     cnt=0;
    48     for(int i=0; i<(1<<n); i++){
    49         if(check(i)){
    50             a[++cnt]=i;
    51             bit[cnt]=fin(i);
    52             }
    53     }
    54     memset(b,0,sizeof(b));
    55     for(int i=1; i<=m; i++)
    56         scanf("%s",w[i]+1);
    57     for(int i=1; i<=m; i++)
    58         for(int j=1; j<=n; j++)
    59             if(w[i][j]=='H')
    60                 b[i]+=(1<<(n-j));
    61     memset(dp,-1,sizeof(dp));
    62     for(int i=1; i<=cnt; i++){
    63         if(fun(a[i],1))
    64             dp[1][1][i]=bit[i];
    65     }
    66 
    67     for(int i=2; i<=m; i++){
    68         for(int k=1; k<=cnt; k++){
    69             if(!fun(a[k],i)) continue;
    70             for(int j=1; j<=cnt; j++){
    71                 if(a[k]&a[j]) continue;
    72                 for(int l=1;l<=cnt;l++){
    73                     if(a[k]&a[l]) continue;
    74                     if(dp[i-1][j][l]==-1) continue;
    75                  dp[i][l][k]=max(dp[i][l][k],dp[i-1][j][l]+bit[k]);
    76                 }
    77             }
    78         }
    79     }
    80     int ans=0;
    81     for(int i=1;i<=m;i++)
    82     for(int j=1;j<=cnt;j++)
    83     for(int l=1;l<=cnt;l++)
    84     ans=max(ans,dp[i][j][l]);
    85     printf("%d
    ",ans);
    86     return 0;
    87 }
     
  • 相关阅读:
    Jmeter Web 性能测试入门 (三):Jmeter 常用组件说明
    Jmeter Web 性能测试入门 (二):Fiddler 抓取 http/https 请求
    Jmeter Web 性能测试入门 (一):环境配置 (免安装版)
    Linux中MySQL配置文件my.cnf参数优化
    认识Docker
    Jmeter命令行方式启动
    ActiveMQ学习笔记(22)----ActiveMQ的优化和使用建议
    ActiveMQ学习笔记(21)----ActiveMQ集成Tomcat
    ActiveMQ学习笔记(20)----Consumer高级特性(二)
    ActiveMQ学习笔记(19)----Consumer高级特性(一)
  • 原文地址:https://www.cnblogs.com/hsd-/p/7074454.html
Copyright © 2020-2023  润新知