博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P3622 [APIO2007]动物园
阅读量:6707 次
发布时间:2019-06-25

本文共 1369 字,大约阅读时间需要 4 分钟。

题意分析

这是一道状压\(DP\)的题

一个人只可以欣赏到\(5\)只动物 显然可以状压

我们用\(dp[i][j]\)表示当前\([i,i+4]\)中这\(5\)只动物的状态\(j\) 在或者不在

最多可以满意的小朋友数

\(num[i][j]\)表示当前\([i,i+4]\)中这\(5\)只动物的状态\(j\) 在或者不在

可以满意的小朋友数

那么就是

\[dp[i][j]=max(dp[i-1][(j\&15)<<1],dp[i-1][(j\&15)<<1|1])+num[i][j]\]

其中首先按位与\(15\)是因为

按照关系\(i\)\(i-1\)个人是共同欣赏\(4\)只动物的

所以我们就提出来

那么前驱状态就只有两种

然后预处理出\(num\)之后 正常转移就可以了

同时需要注意的是

由于是一个环

所以最后的状态要等同于开始的状态

所以我们还需要枚举一个状态

CODE:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define inf 0x7fffffff#define N 50008#define IL inline#define M 10011#define D 50#define ull unsigned long long#define R registerusing namespace std;template
IL void read(T &_){ T __=0,___=1;char ____=getchar(); while(!isdigit(____)) {if(____=='-') ___=0;____=getchar();} while(isdigit(____)) {__=(__<<1)+(__<<3)+____-'0';____=getchar();} _=___ ? __:-__;}/*-------------OI使我快乐-------------*/int n,m,ans;int dp[M][50],num[M][50];int main(){// freopen(".in","r",stdin);// freopen(".out","w",stdout); read(n);read(m); for(R int i=1,x,y,z,cdy,wzy;i<=m;++i) { cdy=wzy=0; read(x);read(y);read(z); for(R int j=1,tmp;j<=y;++j) { read(tmp); tmp=(tmp-x+n)%n; cdy|=(1<

转载于:https://www.cnblogs.com/LovToLZX/p/10741477.html

你可能感兴趣的文章
初学centos
查看>>
combobox 设置下拉列表无效
查看>>
使用commit 命令创建一个带有 ssh 的 ubuntu 镜像(不使用 PAM)
查看>>
解决缓存引发的CSS/JS/IMG问题
查看>>
华为手机年轻化转型初见成效,《梦想的声音》传递了哪些讯号?
查看>>
[C#]在程序中启动另外一个程序
查看>>
支撑双十一的网络引擎:飞天洛神
查看>>
Nacos v0.7.0:对接CMDB,实现基于标签的服务发现能力
查看>>
无线网络多种加密模式比拼
查看>>
浅谈Ddos******与防御
查看>>
微软开源.NET Framework,实现跨平台
查看>>
zabbix安装(超详细)
查看>>
Nginx + keepalived
查看>>
Java学习进度(2013.03.12)—Struts2学习二
查看>>
网络实验环境搭建--4.IOL/IOU桥接与抓包
查看>>
网页制作实验内容
查看>>
oracle 误删除表恢复
查看>>
zabbix安装篇之lnmp
查看>>
索引关键字的选取原则
查看>>
双机热备篇 VGMP招式详解
查看>>