最近抄状压的代码……

然后盯上了这个题目

调试了一个晚上,终于A了

但是是对着宝典打的,我依然不懂状态压缩

那么下一步先把装压放一放,学一下树形DP吧

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<cstring>
#include<string>
using namespace std;
int n,m,s[][];
int f[][][];
int num[][];
bool map[][];
int getnum(int x)
{
int t=;
while(x>){
x=x&(x-);
t++;
}
return t;
}
void dp(){
s[][]=;
int s1,s2,m=;
for(int i=;i<=n;i++,m=m^)
for(int a=;a<=s[i-][];a++){
s1=s[i-][a];
for(int b=;b<=s[i][];b++)
if(map[s1][s[i][b]]){
s2=s[i][b];
if(i==) f[m][a][b]=max(f[m][a][b],num[i][b]);
else{
for(int c=;c<=s[i-][];c++)
if(map[s[i-][c]][s1] && map[s[i-][c]][s2])
f[m][a][b]=max(f[m][a][b],f[m^][c][a]+num[i][b]);
}
}
}
int ans=;
m=m^;
for(int a=;a<=s[n-][];a++)
for(int b=;b<=s[n][];b++)
ans=max(ans,f[m][a][b]);
cout<<ans;
}
int main()
{
int q;cin>>n>>m;
string tmp;
for(int i=;i<=n;i++)
{
cin>>tmp;
q=;
for(int j=;j<tmp.size();j++){
if(tmp[j]=='P') q=(q<<);
else q=(q<<)|;
}
for(int j=;j<(<<m);j++){
if((j<<)&j || (j<<)&j || (j>>)&j || (j>>)&j) continue;
if(q&j) continue;
++s[i][];
s[i][s[i][]]=j;
num[i][s[i][]]=getnum(j);
}
}
for(int i=;i<=(<<m);i++){
for(int j=;j<=(<<m);j++)
if(!(i&j)) map[i][j]=true;
}
dp();
return ;
}

[P2704][NOI2001]炮兵阵地 (状态压缩)的更多相关文章

  1. C++ 洛谷 P2704 [NOI2001]炮兵阵地

    P2704 [NOI2001]炮兵阵地 没学状压DP的看一下 此题意思很简单,如下图,就是十字架上的不能有两个点放炮兵. 在做此题前,先做一下玉米田 玉米田题解 分析: 而m即一行的个数小于等于10, ...

  2. P2704 [NOI2001]炮兵阵地 (状压DP)

    题目: P2704 [NOI2001]炮兵阵地 解析: 和互不侵犯一样 就是多了一格 用\(f[i][j][k]\)表示第i行,上一行状态为\(j\),上上行状态为\(k\)的最多的可以放的炮兵 发现 ...

  3. [洛谷P2704] [NOI2001]炮兵阵地

    洛谷题目链接:[NOI2001]炮兵阵地 题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队.一个NM的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示), ...

  4. POJ1185 - 炮兵阵地(状态压缩DP)

    题目大意 中文的..直接搬过来... 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平 ...

  5. POJ - 1185 炮兵阵地 (状态压缩)

    题目大意:中文题目就不多说大意了 解题思路: 1.每行最多仅仅有十个位置,且不是山地就是平原,那么就能够用1表示山地,0表示平原,将每一行的状态进行压缩了 2.接着找出每行能放炮兵的状态.先不考虑其它 ...

  6. 洛谷P2704 [NOI2001]炮兵阵地 [状压DP]

    题目传送门 炮兵阵地 题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图 ...

  7. 洛谷 P2704 [NOI2001]炮兵阵地 (状态压缩DP+优化)

    题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队.一个NM的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...

  8. POJ1185 炮兵阵地 状态压缩

    因为不知道不同的博客怎么转,就把别人的复制过来了,这个题解写的非常好,原地址为: http://hi.baidu.com/wangxustf/item/9138f80ce2292b8903ce1bc7 ...

  9. P2704 [NOI2001]炮兵阵地

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...

随机推荐

  1. data-key

    在foreach或者each循环中给按钮赋予值 html中:data-key="@config.key" js里获取值: var key = $(this).data(" ...

  2. IDEAL 中配置Tomcat的内存值

    -server -XX:PermSize=2048M -XX:MaxPermSize=4096m

  3. python---使用字典来实现链接表图

    最后一章,坚持!!! # coding = utf-8 class Vertex: def __init__(self, key): self.id = key self.connected_to = ...

  4. 一脸懵逼学习HBase---基于HDFS实现的。(Hadoop的数据库,分布式的,大数据量的,随机的,实时的,非关系型数据库)

    1:HBase官网网址:http://hbase.apache.org/ 2:HBase表结构:建表时,不需要指定表中的字段,只需要指定若干个列族,插入数据时,列族中可以存储任意多个列(即KEY-VA ...

  5. springcloud feign传输List的坑

    无法直接传输List 错误方法1: @RequestMapping(value = "/stat/merchant/get_merchant_compare_info", meth ...

  6. CentOS6安装Zabbix4.0

    安装依赖包yum install net-snmp-devel libevent-devel libxml2-devel curl-devel libjpeg-devel libpng-devel l ...

  7. 【bzoj3717】[PA2014]Pakowanie 状压dp

    题解: 自己在这一类问题上想到的总是3^n的枚举法 首先背包从大到小排序 f[i]表示搞出为i的状态至少要用几个背包,g[i]表示最大剩余容量 这样就可以2^n*n 因为这么做利用了状态之间的先后顺序 ...

  8. Redis主从实战

    为了提升redis高可用性,除了备份redis dump数据之外,还需要创建redis主从架构,可以利用从将数据库持久化,(我们所说的数据持久化将是将数据保存到写磁盘上,保证不会因为断电等因素丢失数据 ...

  9. jquery|js|jq常用正则

    var mobReg=/^1[34578]\d{9}$/; //手机号 if (!mobReg.test(mob)) { mui.alert("请填写正确手机号!"," ...

  10. BZOJ3560 DZY Loves Math V 数论 快速幂

    原文链接http://www.cnblogs.com/zhouzhendong/p/8111725.html UPD(2018-03-26):蒟蒻回来重新学数论了.更新了题解和代码.之前的怼到后面去了 ...