C17K:Lying Island
题意:
有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的更多相关文章
- openJudge C17K:Lying Island
地址:http://poj.openjudge.cn/practice/C17K/ 题目: C17K:Lying Island 查看 提交 统计 提问 总时间限制: 2000ms 内存限制: 26 ...
- 【状压DP】OpenJ_POJ - C17K Lying Island
https://vjudge.net/contest/171652#problem/K [题意] 小岛上有n个人,有些是好人(一定是真话),有些是坏人(可能是真话也可能是假话),现在要判断最多有多少好 ...
- PKU_campus_2017_K Lying Island
思路: 题目链接http://poj.openjudge.cn/practice/C17K/ 状压dp.dp[i][j]表示第i - k人到第i人的状态为j的情况下前i人中最多有多少好人. 实现: # ...
- uva 592 Island of Logic (收索)
Island of Logic The Island of Logic has three kinds of inhabitants: divine beings that always tel ...
- 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 ...
- [LeetCode] Island Perimeter 岛屿周长
You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represen ...
- 463. Island Perimeter
https://leetcode.com/problems/island-perimeter/ 在一个N×N的矩阵中,N<100,1代表岛,0代表海,岛内没有海,求岛的周长 [[0,1,0,0] ...
- Leetcode-463 Island Perimeter
#463. Island Perimeter You are given a map in form of a two-dimensional integer grid where 1 represe ...
- LeetCode Island Perimeter
原题链接在这里:https://leetcode.com/problems/island-perimeter/ 题目: You are given a map in form of a two-dim ...
随机推荐
- python模块详解 sys shutil
sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sy ...
- Struts2_Struts标签大致内容
Struts-Tags1.通用标签 a) property b) set i.默认为 action scope,会将值放入 request 和 ActionContext中 ii. page.requ ...
- Java项目性能瓶颈定位
文章目标 当Java项目出现性能瓶颈的时候,通常先是对资源消耗做分析,包括CPU,文件IO,网络IO,内存:之后再结合相应工具查找消耗主体的程序代码.本文主要介绍系统资源消耗的分析过程,以及常用的Ja ...
- jquery中对于ul>li列表分页。学习记录
这个是很简单的一种分页,只能对列表进行分页.为了开发有可能需要用到记录下来 Html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 T ...
- IOS 数据加密总结(及MD5加密)
数据安全总结 1.网络数据加密1> 加密对象:隐私数据,比如密码.银行信息2> 加密方案* 提交隐私数据,必须用POST请求* 使用加密算法对隐私数据进行加密,比如MD53> 加密增 ...
- JavaEE 面试题总结
一. JDBC 4 1. Java中访问数据库的步骤 4 2. Statement,PreparedStatement,CallableStatement的功能.特点. 4 3. 如何利用JDBC的A ...
- 开发常用宏 - iOS
以下是一些开发中会经常用到的宏,简单的进行了整理,为了今后可以更加方便的使用,从而提升开发的效率,不为此搭进去更多时间. 也希望有大家可以补充,从而使其更加强加! /** * 开发常用宏相关 */ # ...
- jQuery、Angluar、Avalon对比
最近在慕课网看一些关于avalon的视频,记录下一些笔记及代码实例以便日后自己复习可以用到,另外也可以给不想花时间看视频的小伙伴提供一丝丝帮助 这里主要是做一个简单的todolist 分别用三种不同的 ...
- github上更新fork项目
转载:https://blog.csdn.net/qq1332479771/article/details/56087333 ps:需要用GitHub所指定的chrome或者firefox浏览器,其它 ...
- lintcode_111_爬楼梯
爬楼梯 描述 笔记 数据 评测 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 您在真实的面试中是否遇到过这个题? Yes 哪家公司问你的 ...