POJ - 3254

中文题。。

思路:这题可把我恶心坏了,我刚开始的思路其实是正确的。。。

首先我想开个dp[i][s1][s2]保存到 i行 为止当前行状态为s1,上一行状态为s2 的最大个数,然后我先把满足行内条件的

状态存起来,空间用滚动数组优化,但是我在写转移方程的时候发现复杂度太大。。。。 其实复杂度是够的,因为一行里面

满足行内条件的最多有60个合法状态,哈希一下就好啦,都不用滚动数组。。。

然后我又开脑洞去搞三进制的状态压缩,写到最后发现复杂度又不对,才发现原来的方法是正确的。。。。

 #include<cstdio>
#include<vector>
#define fi first
#define se second
#define mk make_pair
#define pii pair<int,int>
#define read(x) scanf("%d",&x)
#define sread(x) scanf("%s",x)
#define dread(x) scanf("%lf",&x)
#define lread(x) scanf("%lld",&x)
using namespace std; typedef long long ll;
const int inf=0x3f3f3f3f;
const int INF=0x3f3f3f3f3f3f3f3f;
const int N=;
const int M=;
const int mod=1e8; int n,m,dp[][][],f[N];
char s[];
vector<int> v,num;
bool check(int x)
{
int cnt=,cur=x;
while(x)
{
int now=x%;
if(cnt< && now)
return false;
if(now) cnt=;
else cnt++;
x/=;
}
return true;
}
int cal(int x)
{
int ans=;
while(x)
x-=x&-x,ans++;
return ans;
}
int main()
{
read(n); read(m);
for(int i=;i<n;i++)
{
scanf("%s",s);
for(int j=;j<m;j++)
f[i]*=,f[i]+=s[j]=='P'? :;
}
int up=<<m;
for(int i=;i<up;i++)
{
if(check(i))
{
v.push_back(i);
num.push_back(cal(i));
}
}
int sz=v.size();
for(int i=;i<sz;i++)
{
int s1=v[i];
if((s1|f[])!=f[])
continue;
for(int j=;j<sz;j++)
{
int s2=v[j];
if((s2|f[])!=f[] || (s1&s2))
continue;
dp[][i][j]=num[i]+num[j];
}
}
for(int i=;i<n;i++)
{
for(int j=;j<sz;j++)
{
for(int k=;k<sz;k++)
{
for(int u=;u<sz;u++)
{
int s1=v[j],s2=v[k],s3=v[u];
if((s1&s2) || (s1&s3) || (s1|f[i])!=f[i])
continue;
dp[i][k][j]=max(dp[i][k][j],dp[i-][u][k]+num[j]);
}
}
}
}
int ans=;
if(n!=)
{
for(int i=;i<sz;i++)
for(int j=;j<sz;j++)
ans=max(ans,dp[n-][i][j]);
}
else
{
for(int i=;i<sz;i++)
if((v[i]|f[])==f[])
ans=max(ans,num[i]);
}
printf("%d\n",ans);
}
/*
*/

POJ - 1185 敌兵炮阵的更多相关文章

  1. HDU 1166 敌兵布阵 (树状数组)

    题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    ...

  2. HDU 1166 敌兵布阵(分块)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  3. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

  4. hdu acm 1166 敌兵布阵 (线段树)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  5. HDU 1166 敌兵布阵

    B - 敌兵布阵 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  6. HDU 1166 敌兵布阵(线段树模板题)

    题目链接: 传送门 敌兵布阵 Time Limit: 2000MS     Memory Limit: 32768 K Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头 ...

  7. ACM: 敌兵布阵 解题报告 -线段树

    敌兵布阵 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Li ...

  8. hdu 敌兵布阵(线段树之单点更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  9. hdu 1166 敌兵布阵--BIT

    BIT模版题,学完直接刷毫无压力,水的不要不要的 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

随机推荐

  1. C 编译过程浅析

    From where i stand, there are two programmig languages in the world, which is C lang and the other. ...

  2. Python写日志

    import logging import ResultFolder logger = logging.getLogger() logger.setLevel(logging.DEBUG) def C ...

  3. JavaScript之创建动态脚本

    //option= {type,src,text,isCreateScriptBySrc} function createDynamicScript(option){ var script = doc ...

  4. Java EE之Hibernate的HibernateSessionFactory

    昨天,一下午都被一个bug缠身,最后逐层排查,发现是MyEclipse 2014自动生成的HibernateSessionFactory有问题.后观察网友提供的自动生成的HibernateSessio ...

  5. [C++]指针和指向数组的指针[一维数组与指针]

     1.一维数组与指针      形如:int型 数组 a[10]                1)&a[0]  地址常量;地址类型:int *型   ; 存储数组a的首地址          ...

  6. Python GUI工具Tkinter以及拖拉工具Page安装

    如果使用Tkinter作为Python GUI工具,我们需要安装Tkinter,这个使用conda或者pip即可: conda install -c anaconda tk 为了提高界面编写效率,可以 ...

  7. AES加解密算法

    直接粘代码,该类是基于微信公众号消息加密解密所提供的PHP DEMO改造而来,目前使用于彬彬大学APP接口token校验中. php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂.因此它被 ...

  8. Check Box、Radio Button、Combo Box控件使用

    Check Box.Radio Button.Combo Box控件使用 使用控件的方法 1.拖动控件到对话框 2. 定义控件对应的变量(值变量或者控件变量) 3.响应控件各种消息 Check Box ...

  9. 深入对比TOML,JSON和YAML

    坦率地说,在我开始与Hugo TOML合作之前,我感到羞耻是一个需要发现的新领域,但我对YAML和JSON非常熟悉.本文将帮助您了解如何通过不同的数据格式构建数据.       在Hugo中,您可以将 ...

  10. 如何用Python写一个贪吃蛇AI

    前言 这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过.但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势的地方了. 问题的关键在于,图片中的贪吃蛇真的很贪吃XD, ...