链接

题意:

  有n个人,每个人可能会说:

  • 第x个人是好人/坏人
  • 如果第x个人是好人/坏人,则第y个人是好人/坏人

思路:

  状压dp,首先每个人所说的人只能是他前面10个人,所以对于第i个人记录下,他前面十个人的情况。

  对于第i个人,如果他说的话一个状态不冲突,那么i可以由这个状态转移。

  注意:对于“如果第x个人是好人,那么第y个人是坏人 “,那么x是好人,y是好人是不满足的。但是除了x是好人y是坏人这种情况满足,x是坏人,也是满足的。(一定要学好语文!)

代码

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath> using namespace std; int dp[][];
char str[];
int k; void work1(int i,int x,int z) {
int t = ( << k);
for (int j=; j<t; ++j) {
if (((j>>(x-i+k))&)==z) dp[i][(j+t)>>] = max(dp[i][(j+t)>>],dp[i-][j]+);
dp[i][j>>] = max(dp[i][j>>],dp[i-][j]);
}
}
void work2(int i,int x,int y,int z1,int z2) {
int t = ( << k);
for (int j=; j<t; ++j) {
int t1 = ((j>>(x-i+k))&) == z1,t2 = ((j>>(y-i+k))&) != z2;
if (!(t1&&t2)) dp[i][(j+t)>>] = max(dp[i][(j+t)>>],dp[i-][j]+);
dp[i][j>>] = max(dp[i][j>>],dp[i-][j]);
}
}
int main() {
int T,n,x,y,z;
scanf("%d",&T);
while (T--) {
scanf("%d%d",&n,&k);
memset(dp,-,sizeof(dp));
for (int j=,t=(<<(k-)); j<t; ++j) dp[][j] = ;
for (int j=(<<(k-)),t=(<<k); j<t; ++j) dp[][j] = ; for (int i=; i<=n; ++i) {
scanf("%s%s%s%d",str,str,str,&x);
if (str[]=='P') {
scanf("%s%s%s",str,str,str);
if (str[]=='g') z = ;
else z = ;
scanf("%s",str);
work1(i,x,z);
}
else {
scanf("%s%d%s%s%s",str,&x,str,str,str);
if (str[]=='g') z = ;
else z = ;
scanf("%s%s%d%s%s%s",str,str,&y,str,str,str);
work2(i,x,y,z,str[]=='g');
scanf("%s",str);
}
}
int ans = ;
for (int i=,t=(<<k); i<t; ++i) ans = max(ans,dp[n][i]);
printf("%d\n",ans);
}
return ;
}

C17K:Lying Island的更多相关文章

  1. openJudge C17K:Lying Island

    地址:http://poj.openjudge.cn/practice/C17K/ 题目: C17K:Lying Island 查看 提交 统计 提问 总时间限制:  2000ms 内存限制:  26 ...

  2. 【状压DP】OpenJ_POJ - C17K Lying Island

    https://vjudge.net/contest/171652#problem/K [题意] 小岛上有n个人,有些是好人(一定是真话),有些是坏人(可能是真话也可能是假话),现在要判断最多有多少好 ...

  3. PKU_campus_2017_K Lying Island

    思路: 题目链接http://poj.openjudge.cn/practice/C17K/ 状压dp.dp[i][j]表示第i - k人到第i人的状态为j的情况下前i人中最多有多少好人. 实现: # ...

  4. uva 592 Island of Logic (收索)

      Island of Logic  The Island of Logic has three kinds of inhabitants: divine beings that always tel ...

  5. LightOJ 1418 Trees on My Island (Pick定理)

    题目链接:LightOJ 1418 Problem Description I have bought an island where I want to plant trees in rows an ...

  6. [LeetCode] Island Perimeter 岛屿周长

    You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represen ...

  7. 463. Island Perimeter

    https://leetcode.com/problems/island-perimeter/ 在一个N×N的矩阵中,N<100,1代表岛,0代表海,岛内没有海,求岛的周长 [[0,1,0,0] ...

  8. Leetcode-463 Island Perimeter

    #463. Island Perimeter You are given a map in form of a two-dimensional integer grid where 1 represe ...

  9. LeetCode Island Perimeter

    原题链接在这里:https://leetcode.com/problems/island-perimeter/ 题目: You are given a map in form of a two-dim ...

随机推荐

  1. sudoers文件解析

    分类: LINUX 今天在用户组中新加了一个普 通用户,开始这个用户没有sudo权限,于是通过sudo visudo修改了sudo的配置文件,赋予了普通用户的root权限.后来想着能不能将/etc/s ...

  2. 07、Spark集群的进程管理

    07.Spark集群的进程管理 7.1 概述 Spark standalone集群模式涉及master和worker两个守护进程.master进程是管理节点,worker进程是工作节点.spark提供 ...

  3. VOS3000设置落地网关优先级

    问题描述: 现在有两种套餐卡A:无限通话B:每月3000分钟两个落地网关:GW100:32线用的A套餐GW101:32线用的B套餐 比如现在是12月5号还没到月底,突然发现GW101上所剩可用通话时间 ...

  4. 在android开发中如何使用JavaMail程序

    javaMail,是提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开发出类似于Microsoft  ...

  5. Sublime Text3 + Markdown + 实时预览

    Sublime Text3是一款给力的文本编辑器,通过安装插件可以编辑Markdown文本,在编辑Markdown文本的同时可以实时预览编辑效果. 安装准备: 找到菜单栏:Preferences → ...

  6. golang实现文件上传权限验证(超简单)

    Go语言创建web server非常简单,部署也很容易,不像IIS.Apache等那么重量级,需要各种依赖.配置.一些功能单一的web 服务,用Go语言开发特别适合.http文件上传下载服务,在很多地 ...

  7. Fiddler-1 官网下载及安装

    1 进入Fiddler官网:http://www.telerik.com/fiddler 点击[Free download]:填写一些信息后就可以下载. 2 双击安装包--下一步dinghanhua下 ...

  8. poj 3485 区间选点

    题目链接:http://poj.org/problem?id=3485 题意:X轴上公路从0到L,X轴上下有一些点给出坐标代表村庄,问在公路上最少建几个出口才能使每个村庄到出口的距离不超过D. 以村庄 ...

  9. php无法保存SESSION问题总汇

    昨天客户又过来说网站的问题,说的也都是些毛毛雨的东西,管理那么多网站,再有这么些客户的存在,本人也是累了,但当登录后台的时候突然发现后台登录不了,查看了一下验证码服务器端的session为空值,之前登 ...

  10. which,whereis,locate,find

    which      查看可执行文件的位置 [root@redhat ~]# which passwd /usr/bin/passwd which是通过 PATH 环境变量到该路径内查找可执行文件,所 ...