P3622 [APIO2007] 动物园 -题解
好写 爱写 没事干 所以有了这篇题解
洛谷P3622 [APIO2007] 动物园 题解
题目说的挺繁琐,其实就传达了一个很简单的信息:
\(n\)个动物,\(c\)个小孩,每个小孩能看到\(5\)个动物(所在的位置)\(E\)到\(E+4\),有\(F\)个害怕的动物,\(L\)个喜欢的动物。如果视野中有至少一个喜欢的动物,或者讨厌的动物被移走至少一个,他就会高兴。你可以任意移走动物,求最多有几个小孩高兴。
由于每个视野固定长度为\(5\),所以只要状压每五个动物被移走的状态即可,枚举范围为\(0\) ~ \(2^5-1\),即\(0\) ~ \(31\)。
输入的时候做好初始化工作,得到数组\(num[N][S]\),表示从\(N\)开始5个动物在\(S\)状态下高兴的孩子数。
然后整个循环遍历一遍,状态转移方程为:
\]
还有就是:
定义局部变量一定要记得初始化啊啊啊啊啊啊!!!
咳 下面是代码:
**code**
/*函数内定义变量一定要初始化啊啊啊啊啊啊*/
#include<bits/stdc++.h>
#define fo(x,y,z) for(int (x)=(y);(x)<=(z);(x)++)
#define fu(x,y,z) for(int (x)=(y);(x)>=(z);(x)--)
using namespace std;
typedef long long ll;
inline int qr()
{
char ch=getchar();int x=0,f=1;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
#define qr qr()
const int Ratio=0;
const int N=50005;
const int maxx=INT_MAX;
const double eps=1e-8;
int n,m,ans;
#define check(st) ((st&l)||(~st&d))
int num[N][50],zl[N][50];
int main()
{
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
n=qr,m=qr;
ans=-maxx;
fo(i,1,m)
{
int a=qr,b=qr,c=qr,l=0,r=0,d=0;//***
fo(j,1,b)
d=qr,d=(d-a+n)%n,l|=1<<d;
fo(j,1,c)
d=qr,d=(d-a+n)%n,r|=1<<d;
fo(j,0,31)
if((j&l)||(~j&r))
num[a][j]++;//第a个点开始状态为j满足的小孩的个数
}
fo(i,0,31)//每个人只能看到5动物 枚举状态
{
fo(j,0,35)
zl[0][j]=-maxx;
zl[0][i]=0;
fo(j,1,n)//遍历以n为起点向下五个状态的情况
fo(k,0,31)
zl[j][k]=max(zl[j-1][(k&15)<<1],zl[j-1][(k&15)<<1|1])+num[j][k];
ans=max(ans,zl[n][i]);
}
printf("%d\n",ans);
return Ratio;
}
\(End.\)
彩蛋

P3622 [APIO2007] 动物园 -题解的更多相关文章
- P3622 [APIO2007]动物园
题目链接 题意分析 这是一道状压\(DP\)的题 一个人只可以欣赏到\(5\)只动物 显然可以状压 我们用\(dp[i][j]\)表示当前\([i,i+4]\)中这\(5\)只动物的状态\(j\) 在 ...
- 洛谷 P3622 [APIO2007]动物园【状压dp】
看成网络流建图想了好久... 实际上5个是可以状压的 设f[i][k]为到第i个围栏状态为k的方案数,因为考虑到重复,设g[i][k]记录i开始,状态为k的孩子有几个 状态转移很好想:f[j][k]= ...
- Luogu [P3622] [APIO2007]动物园
题目链接 比较费脑子的一道题 先说题目核心思想 : 状压dp 环的处理我们先不管. 我们设 dp[j][s] 表示 到达动物 j 且 [ j , j+5) 这五个动物状态为s时 最多能使多少小朋友开心 ...
- P3622 [APIO2007]【一本通提高状态压缩类动态规划】动物园
广告 绿树公司 - 官方网站:https://wangping-lvshu.github.io/LvshuNew/ 绿树智能 - 官方网站:https://wangping-lvshu.github. ...
- [APIO2007]动物园 --- 状压DP
[APIO2007]动物园 题目描述 新建的圆形动物园是亚太地区的骄傲.圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围栏里有一种动物. 如下图所示: 你是动物园的公共主管.你要做的是,让每 ...
- 题解 洛谷P3622/BZOJ1151【[APIO2007]动物园】
这一道题,我也是搞了很久才搞懂的(也就两个多小时). 感谢Rayment大佬的题解! 我们进入正题. 对于一个笼子里的动物,我们可以选择撤走或不撤走,可以用0和1来表示,很容易就想到二进制,想到状压d ...
- 【题解】APIO2007动物园
首先一眼感受到这题特别的性质……5个?这么小的,感觉就像是状压.脑补了一下,如果没有环的话应该很好做吧……有环怎么办?5真的很小的,随便乱搞肯定也可以.那就放在外面暴力枚举吧.然后正解就出来了. 然而 ...
- 【KMP】洛谷P2375 [NOI2014]动物园 题解
一开始的方向应该对了,但是没有想到合理的优化还是没写出来…… 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己 ...
- [APIO2007]动物园
题目描述 新建的圆形动物园是亚太地区的骄傲.圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围栏里有一种动物. 你是动物园的公共主管.你要做的是,让每个来动物园的人都尽可能高兴.今天有一群小朋 ...
- APIO 2007 动物园 题解
链接题面 看清楚找到小数据范围,第一维表示遍历到的栅栏,第二维是五位状态 先预处理每个状态会使多少小朋友高兴 方程是 f[i][j]=max(f[(i&((1<<4)-1))&l ...
随机推荐
- https安全性 带给im 消息加密的启发
大家好,我是蓝胖子,在之前# MYSQL 是如何保证binlog 和redo log同时提交的?这篇文章里,我们可以从mysql的设计中学会如何让两个服务的调用逻辑达到最终一致性,这也是分布式事务实现 ...
- Rust 实现日志记录功能
目录 log 日志库标准 简单示例 使用方法 库的开发者 应用开发者 日志库开发者 使用 log4rs 添加依赖 配置文件 运行项目 参考文章 log 日志库标准 log 是 Rust 的日志门面库, ...
- #贪心#CF1054D Changing Array
题目 给定 \(n\) 个 \(k\) 位二进制数,\(n\leq 2*10^5,k\leq 30\) 可以选择若干数将其所有二进制位取反, 最多可以有多少个区间的异或和不为 0 分析 考虑将区间异或 ...
- #KD-Tree#洛谷 4849 寻找宝藏
题目传送门 题目大意 在一个四维坐标系中,给定 \(n\) 个点,问有多少种选择点的方案, 使得这些点排序后任意坐标单调不降,并且选择的点权和最大,同时输出最大值 分析 设 \(f[i]\) 表示最后 ...
- #cdq分治,树状数组#洛谷 5459 [BJOI2016]回转寿司
题目 求 \[\sum_{i=1}^n\sum_{j=i}^{n}[L\leq \sum_{k=i}^j a_k\leq R] \] 分析(树状数组) 考虑前缀和,改为是否有两个数的差在\([L\si ...
- “最新趋势:R语言lavaan结构方程模型(SEM)的实践应用与技巧”
结构方程模型(Sructural Equation Modeling,SEM)是分析系统内变量间的相互关系的利器,可通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和广泛的适用性, ...
- K8S 性能优化-K8S Node 参数调优
前言 K8S 性能优化系列文章,本文为第四篇:Kubernetes Node 性能优化参数最佳实践. 系列文章: <K8S 性能优化 - OS sysctl 调优> <K8S 性能优 ...
- 【直播预告】HarmonyOS 极客松赋能直播第六期:产品创新从哪里来?
- Spring Cloud 核心组件之Spring Cloud Hystrix:服务容错保护
Spring Cloud Hystrix:服务容错保护 SpringCloud学习教程 SpringCloud Spring Cloud Hystrix 是Spring Cloud Netflix 子 ...
- C/C++常考习题
1.什么是虚函数?什么是纯虚函数? 虚函数:允许被其子类重新定义的成员函数. 虚函数的声明:virtual returntype func(parameter);引入虚函数的目的是为了动态绑定: 纯虚 ...