zoukankan      html  css  js  c++  java
  • 炮兵阵地

    BannerHome PageWeb ContestsProblemsRanklistStatusStatistics
     1 #include<iostream>
     2 #include<string>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<cctype>
     6 #include<cstdio>
     7 using namespace std;
     8 int c[100];
     9 int s[100];
    10 int ans;
    11 int bitmap[100];
    12 int f[100][70][70],h;
    13 char str[100];
    14 int n,m,i,j,k;
    15  void init()
    16  {
    17      cin>>n>>m;
    18      memset(bitmap,0,sizeof(bitmap));
    19      for(i=0;i<n;i++)
    20       {
    21           cin>>str;
    22           for(j=0;j<m;j++)
    23            if(str[j]=='H')bitmap[i]+=(1<<(m-j-1));//存贮数组
    24            getchar();
    25       }
    26  }
    27  void  solve()
    28  {
    29 
    30      memset(f,0,sizeof(f));
    31      for(i=0;i<n;i++)
    32      {
    33         if(i==0)
    34          {
    35              for(j=0;j<ans;j++)
    36               {
    37                   if(bitmap[i]&c[j])continue;
    38                   f[i][j][0]=s[j];
    39               }
    40 
    41          }
    42         else if(i==1)
    43              {
    44                  for(j=0;j<ans;j++)
    45                   {
    46                       if(bitmap[i]&c[j])continue;
    47                       for(k=0;k<ans;k++)
    48                        {
    49                            if(bitmap[i-1]&c[k])continue;
    50                            if(c[j]&c[k])continue;
    51                            if(f[i][j][k]<f[i-1][k][0]+s[j])
    52                              f[i][j][k]=f[i-1][k][0]+s[j];
    53                        }
    54                   }
    55              }
    56         else
    57         {
    58          for(j=0;j<ans;j++)
    59          {
    60            if(bitmap[i]&c[j])continue;
    61             for(k=0;k<ans;k++)
    62              {
    63                  if(bitmap[i-1]&c[k])continue;
    64                  if(c[j]&c[k])continue;
    65                   for(h=0;h<ans;h++)
    66                    {
    67                        if(bitmap[i-2]&c[h])continue;
    68                        if(c[j]&c[h]||c[k]&c[h])continue;
    69                         if(f[i][j][k]<f[i-1][k][h]+s[j])
    70                           f[i][j][k]=f[i-1][k][h]+s[j];
    71                    }
    72              }
    73        }
    74      }
    75      }
    76      int max1=-1;
    77      for(i=0;i<ans;i++)
    78       for(j=0;j<ans;j++)
    79         if(max1<f[n-1][i][j])
    80           max1=f[n-1][i][j];
    81       cout<<max1<<endl;
    82  }
    83  int main()
    84  {
    85      init();
    86       ans=0;
    87     for(i=0;i<(1<<m);i++)//状态压缩好像64个
    88      {
    89          int t=i;
    90          if(i&(t<<1)||i&(t<<2))continue;
    91           s[ans]=t%2;
    92          while(t=(t>>1))s[ans]+=t%2;
    93          c[ans++]=i;
    94      }
    95      solve();
    96      return 0;
    97  }
    View Code

    炮兵阵地

    Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other)
    Total Submission(s) : 16   Accepted Submission(s) : 2
    Problem 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
     
    ***********************************************************************************************
    这个题wa了n次,个人认为主要是状态的压缩和dp方程的建立,和dp数组的初始化
    ***********************************************************************************************
     
  • 相关阅读:
    用外部表的方式查询当天数据库alert日志文件
    比较数据泵和exp/imp对相同数据导出/导入的性能差异
    理解Oracle TM和TX锁
    Rocky4.2下安装金仓v7数据库(KingbaseES)
    理解listagg函数
    sql*loader的直接加载方式和传统加载方式的性能差异
    Rocky4.2下安装达梦(DM)6数据库
    演示对sys用户和普通用户进行审计的示例
    演示一个通过触发器进行审计的示例
    演示一个使用db vault进行安全控制的示例
  • 原文地址:https://www.cnblogs.com/sdau--codeants/p/3235047.html
Copyright © 2011-2022 走看看