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. JacobMathType

    JACOB是一个 Java到微软的COM接口的桥梁.使用JACOB允许任何JVM访问COM对象,从而使JAVA应用程序能够调用COM对象,;MathType 是由美国Design Science公司开 ...

  2. 后台拿webshell方法(2)

    在这里总结一下后台拿webshell的方法: 备份突破(在博客上有随笔介绍) 一般在后台上传文件类型受到限制,可以利用数据库备份将其上传的格式改为后门执行格式即可: asp更改为jpg     jpg ...

  3. js 获取当前日期或者前、后N天yyyy-MM-dd的方法

    //js获取当前日期.当前日期前.后N天的标准年月日 //day=0为当前天,day=7为前7天,day=-7为当前日期的后7天 function getstartdate(day) {        ...

  4. [转]OpenBLAS项目与矩阵乘法优化

    课程内容 OpenBLAS项目介绍 矩阵乘法优化算法 一步步调优实现 以下为公开课完整视频,共64分钟: 以下为公开课内容的文字及 PPT 整理. 雷锋网的朋友们大家好,我是张先轶,今天主要介绍一下我 ...

  5. python读写文件字符集

    操作I/O的能力是由操作系统的提供的,每一种编程语言都会把操作系统提供的低级C接口封装起来供开发者使用,Python也不例外.  读写文件是需要请求操作系统去操作磁盘的  所以默认的编码就是你平台的编 ...

  6. struct 与 class 的区别

    C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能. struct能包含成员函数吗? 能! struct能继承吗? 能!! s ...

  7. Levmar 配置

    Levmar配置 原文有些错误,在我的博客里已经改好了:http://blog.sina.com.cn/s/blog_45b747f70101he1t.html 如果6或者7自由度机器人的运动学逆解无 ...

  8. 【Mysql sql inject】【入门篇】SQLi-Labs使用 part 2【12-14】

    这几关主要是考察POST形式的SQLi注入闭合 ## Less-12 - POST - Error Based- Double quotes- String ### 1)知识点 主要考察报错注入中的双 ...

  9. WebSphere的jython编码的一个坑

    was5.1版本,用"name=" in line这类判断字符串包含的方式时,系统会提示报错 TypeError: string member test needs char le ...

  10. des结合base64加解密的python源码

    #coding=utf8 from pyDes import * import base64 class Crypt_Error(): pass """ des方法,de ...