首页 > 其他分享 >状态压缩dp——动物园

状态压缩dp——动物园

时间:2024-04-08 16:27:02浏览次数:28  
标签:移走 压缩 围栏 动物 高兴 小朋友 动物园 dp

题目描述
新建的圆形动物园是亚太地区的骄傲。圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围栏里有一种动物。如下图所示:

你是动物园的公关主管。你要做的是,让每个参观动物园的游客都尽可能高兴。今天有一群小朋友来到动物园参观,你希望能让他们在动物园度过一段美好的时光。但这并不是一件容易的事?D?D有些小朋友喜欢某些动物,而有些小朋友则害怕某些动物。例如, Alex 喜欢可爱的猴子和考拉,而害怕拥有锋利牙齿的狮子。而 Polly 会因狮子有美丽的鬃毛而喜欢它,但害怕有臭味的考拉。

你可以选择将一些动物从围栏中移走以使得小朋友不会害怕。但你移走的动物也不能太多,否则留给小朋友们观赏的动物就所剩无几了。

每个小朋友站在大围栏圈的外面,可以看到连续的5个围栏。你得到了所有小朋友喜欢和害怕的动物信息。当下面两处情况之一发生时,小朋友就会高兴:
至少有一个他害怕的动物被移走;
至少有一个他喜欢的动物没被移走。
例如,考虑下图中的小朋友和动物:

假如你将围栏4和12的动物移走。Alex和Ka-Shu将很高兴,因为至少有一个他们害怕的动物被移走了。这也会使 Chaitanya 高兴,因为他喜欢的围栏6和8中的动物都保留了。但是,Polly 和 Hwan 将不高兴,因为他们看不到任何他们喜欢的动物,而他们害怕的动物都还在。这种安排方式使得三个小朋友高兴。
现在换一种方法,如果你将围栏4和6中的动物移走,Alex 和 Polly 将很高兴,因为他们害怕的动物被移走了。Chaitanya 也会高兴,虽然他喜欢的动物6被移走了,他仍可以看到围栏8里面他喜欢的动物。同样的 Hwan 也会因可以看到自己喜欢的动物12而高兴。唯一不高兴的只有 Ka-Shu。
如果你只移走围栏13中的动物,Ka-Shu 将高兴,因为有一个他害怕的动物被移走了,Alex, Polly, Chaitanya 和 Hwan 也会高兴,因为他们都可以看到至少一个他们喜欢的动物。所以有5个小朋友会高兴。这种方法使得了最多的小朋友高兴。
输入格式

输出格式
仅输出一个数,表示最多可以让多少个小朋友高兴。
样例

对于全部数据 10<=N<=1e4,1<=C<=5e4,1<=E<=N

点击查看代码
#include<bits/stdc++.h>
using namespace std;

const int maxn=1e4+10;
int n,c,st,Max,x,l,r;
int fear,like,warch[maxn][32],dp[maxn][32];

int main()
{
	scanf("%d%d",&n,&c);
	for(int i=1;i<=c;i++)
	{
		scanf("%d%d%d",&st,&l,&r);
		fear=0,like=0;
		for(int j=1;j<=l;j++)
		{
			int num=0;
			scanf("%d",&x);
			num=(x-st+n)%n;
			fear|=(1<<num);//可见的围栏中害怕哪些 
		}
		for(int j=1;j<=r;j++)
		{
			int num=0;
			scanf("%d",&x);
			num=(x-st+n)%n;
			like|=(1<<num);//可见的围栏中喜欢哪些 
		}
		for(int s=0;s<32;s++)//遍历所有情况如果某种情况符合其中一个条件就+1 
		{
			if((s&fear)||(~s&like)) warch[st][s]++;
		}
	}
	for(int s=0;s<32;s++)
	{
		memset(dp,0xcf,sizeof(dp));
		dp[0][s]=0;
		for(int i=1;i<=n;i++)
		{
			for(int j=0;j<32;j++)
			{
				dp[i][j]=max(dp[i-1][(j&15)<<1],dp[i-1][(j&15)<<1|1])+warch[i][j];//dp由上一个状态i-1到i看是移走高兴的人多还是不移走高兴的人多 
			}
		}
		Max=max(Max,dp[n][s]);
	}
	printf("%d",Max);
	
	return 0;
}

标签:移走,压缩,围栏,动物,高兴,小朋友,动物园,dp
From: https://www.cnblogs.com/cuichenxi/p/18121570

相关文章

  • JUC:ThreadPoolExecutor线程池的使用方法
    文章目录ThreadPoolExecutor线程池状态构造方法Executors工厂方法newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutor提交任务方法关闭任务方法ThreadPoolExecutor线程池状态线程池用高三位表示状态,第一位为符号位。TERMINATED>TIDYING>STOP>......
  • 动物园
    [APIO2007]动物园题目描述新建的圆形动物园是亚太地区的骄傲。圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围栏里有一种动物。如下图所示:你是动物园的公共主管。你要做的是,让每个来动物园的人都尽可能高兴。今天有一群小朋友来动物园参观,你希望能让他们在动物园......
  • 【算法每日一练]-动态规划(保姆级教程 篇17 状态压缩)
     目录今日知识点:把状态压缩成j,dp每行i的布置状态,从i-1和i-2行进行不断转移把状态压缩成j,dp每行i的布置状态,从i-1行进行状态匹配,然后枚举国王数转移 POJ1185:炮兵阵地思路:题目:互不侵犯思路:                 POJ1185:炮兵阵地在N*M(N<100,M<10)......
  • 如何避免WordPress中文乱码现象
    在使用WordPress网站的过程中,很多用户都会遇到中文乱码的问题。中文乱码会给用户阅读和浏览网站带来困扰,也可能影响网站的用户体验和搜索引擎优化。在本篇文章中,我们将介绍一些解决WordPress中文乱码问题的方法,并提供具体的代码示例。1、设置数据库字符集:首先,要确保数据库字符集......
  • WordPress访问不了?快速解决方法大揭秘!
    《WordPress访问不了?快速解决方法大揭秘!》WordPress作为一个流行的内容管理系统,被广泛应用于网站建设领域。然而,有时候我们可能会遇到WordPress网站无法访问的情况,这个问题如果不及时处理,会影响网站的正常运行,进而影响用户体验。本文将探讨常见的WordPress网站无法访问问题,并提供......
  • WordPress网站乱码怎么办?快速解决方案
    在使用WordPress建立网站的过程中,有时候会遇到网站页面出现乱码的情况,这会影响用户体验和网站的可读性。造成网站乱码的原因可能有很多,比如字符编码设置不正确、插件冲突、主题代码问题等。本文将为您介绍一些快速解决WordPress网站乱码问题的具体方法,并提供相应的代码示例。1.......
  • 解决WordPress页面错位问题的实用技巧
    解决WordPress页面错位问题的实用技巧WordPress作为世界上最流行的内容管理系统之一,提供了强大的功能和灵活的定制性,使得许多网站管理员和开发人员选择使用它来搭建自己的网站。然而,有时候在使用WordPress创建页面时,可能会遇到页面错位的问题,导致页面布局混乱,影响用户体验。那么,......
  • 野外监测图传解决方案 l 自定义数据回传最大200倍压缩,天通野外摄像机PS02
    在物联网时代的巨大浪潮中,我们见证了技术的飞速发展和应用的广泛渗透。然而,传统的人工巡检方式在这一进程中显得越来越力不从心,其效率低下和响应迟缓的问题日益凸显。在许多情况下,人工巡检无法实时捕捉到潜在的风险和异常情况,常常是在事故发生后才能察觉,这种滞后性严重制约了......
  • SOS dp
    SOSdp是解决类似这样的问题\[\begin{aligned}F[mask]&=\sum_{i\subseteqmask}A[i]\end{aligned}\]的一种解法(其实就是高维前缀和)。这种问题,有不同的解法,比如:1.时间复杂度\(O(4^n)\)for(intmask=0;mask<(1<<N);++mask){ for(inti=0;i<(1<<N);++i){ i......
  • 以太网UDP:心跳包、ICMP与ARP
    参考:https://juejin.cn/post/6844903951452602375心跳包UDP:用户数据报协议:主要用在实时性要求比较高的以及对质量相对较弱的地方.但是面对现在高质量的线路不会容易丢包,除非是一些拥塞条件下,如流媒体TCP:传输控制协议:是面连接的那么运行环境必然要求其可靠性不可丢包,......