link

其实就是一个比较简单的$IOI$题。简单$dp$就行,设$5$维$dp$即可

最后在滚动一下,判一下可行性即可。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
inline int read(){
int f=,ans=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
const int N=;
int dp[N][][][][];
int val[],A[];
int calc(int a,int b,int c){
A[]=a,A[]=b,A[]=c;sort(A+,A++);
int res=(A[]!=);
if(A[]!=A[]&&A[]) res++;
if(A[]!=A[]&&A[]) res++;
return res;
}
int maxn;
int cur;
int main(){
cur=;
memset(dp,-,sizeof(dp));dp[][][][][]=;
int n=read();
for(int i=;i<=n;i++){char str=getchar();if(str=='M') val[i]=;if(str=='F')val[i]=;if(str=='B') val[i]=;}
for(int i=;i<=n;i++){
cur^=;
for(int t1=;t1<=;t1++)
for(int t2=;t2<=;t2++)
for(int t3=;t3<=;t3++)
for(int t4=;t4<=;t4++){
if(dp[cur^][t1][t2][t3][t4]==-) continue;
dp[cur][t2][val[i]][t3][t4]=max(dp[cur][t2][val[i]][t3][t4],dp[cur^][t1][t2][t3][t4]+calc(t1,t2,val[i]));
dp[cur][t1][t2][t4][val[i]]=max(dp[cur][t1][t2][t4][val[i]],dp[cur^][t1][t2][t3][t4]+calc(t3,t4,val[i]));
}
memset(dp[cur^],-,sizeof(dp[cur^]));
}
for(int t1=;t1<=;t1++)
for(int t2=;t2<=;t2++)
for(int t3=;t3<=;t3++)
for(int t4=;t4<=;t4++) if(dp[cur][t1][t2][t3][t4]!=-)maxn=max(maxn,dp[cur][t1][t2][t3][t4]);
cout<<maxn;
}

[IOI2007]Miners 矿工配餐的更多相关文章

  1. [Ioi2007]Miners 矿工配餐(BZOJ1806)

    [Ioi2007]Miners 矿工配餐 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 214  Solved: 128 Description 现有两 ...

  2. BZOJ 1806: [Ioi2007]Miners 矿工配餐( dp )

    dp... ------------------------------------------------------------------------------- #include<cs ...

  3. bzoj1806 [Ioi2007]Miners矿工配餐

    [bzoj1806][Ioi2007]Miners 矿工配餐 2014年7月10日1,7870 Description 现有两个煤矿,每个煤矿都雇用一组矿工.采煤工作很辛苦,所以矿工们需要良好饮食.每 ...

  4. [bzoj1806] [ioi2007]Miners 矿工配餐

    相当于noip前两题难度的ioi题........ 还是挺好想的...算是状压一下?...两个二进制位可以表示三种食物或者没有,所以用四个二进制位表示某个煤矿最近两餐的情况... 先把各种情况加上各种 ...

  5. BZOJ 1806: [Ioi2007]Miners 矿工配餐

    ime Limit: 10 Sec  Memory Limit: 64 MBSubmit: 910  Solved: 559[Submit][Status][Discuss] Description ...

  6. bzoj 1806 [Ioi2007]Miners 矿工配餐(DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1806 [题意] 给定一个权在1..3内的序列,在保持相对位置不变的情况下拆分成两个序列 ...

  7. BZOJ 1806 IOI2007 Miners 矿工配餐 动态规划

    题目大意:将一个123序列拆分为两个子序列.定义每一个数的贡献值为以这个数结尾的长度最大为3的子串中不同数的数量,求贡献值和的最大值 令f[i][a1][a2][b1][b2]为前i个数分成两组,第一 ...

  8. 【bzoj1806】[Ioi2007]Miners 矿工配餐 dp

    题目描述 有n个物品,每个都是3种之一.现要将这n个物品分成两个序列,对于每个序列中的每个物品,可以得到 它及它前面相邻的两个物品(不足则取全部)中不同种类的个数 的收益.问最大的总收益. 输入 输入 ...

  9. 洛谷 P4401 [IOI2007]Miners 矿工配餐

    题意简述 有两个矿洞,已知食物的种类(≤3)和顺序,将他们送往任一矿洞, 若一个矿洞3次食物相同,贡献1:若有2种不同食物,贡献2:若有3种不同食物,贡献3 求最大贡献 题解思路 food[i] 为当 ...

随机推荐

  1. Win10系统XWware虚拟机安装Linux系统(Ubuntu)最新版教程

    XWware虚拟机安装Linux系统(Ubuntu)教程 一.下载并安装VMware虚拟机 借助VMware Workstation Pro, 我们可以在同一台Windows或Linux PC上同时运 ...

  2. JS里点击事件判断是否 触发了节点 和给标签添加class属性

    $("#activityType").click(function(e){ if(e.target==$("#bb")[0]){ var bb=document ...

  3. Java学习 · 初识 面向对象深入二

    面向对象深入 1.            抽象类 a)     声明 i.           抽象方法和抽象类必须用abstract来修饰 ii.           没有方法体,不需要实现 b)  ...

  4. 代码对齐 (Alignment of Code,ACM/ICPC NEERC 2010,UVa1593)

    题目描述: 解题思路: 输入时提出单个字符串,并用一个数组记录每列最长长度,格式化输出 #include <iostream> #include <algorithm> #in ...

  5. Memcache的客户端连接系列(二) Python

    关键词: Memcached   Python 客户端 声明:本文并非原创,转自华为云帮助中心的分布式缓存服务(Memcached)的用户指南.客户端连接方法通用,故摘抄过来分享给大家. Python ...

  6. 机器学习之支持向量机(Support Vector Machine)

    转载请注明出处:http://www.cnblogs.com/Peyton-Li/ 支持向量机 支持向量机(support vector machines,SVMs)是一种二类分类模型.它的基本模型是 ...

  7. Kali信息收集工具-dimtry

    帮助文档 -s和-e参数需要用到google搜索 1.获取whois主机ip信息 2.扫描端口,根据banner信息判断服务  

  8. wamp下安装https 实现 ssl 协议,主要是编写小程序通讯

    也不知道腾讯为啥要这个限制,是想卖他的服务器资源么 简单几句话 1 wamp3.0.X的版本不行,我折腾了一天半,放弃了,换成wamp2.5 一次通过 2 证书 去腾讯云申请,单独域名的可以申请免费的 ...

  9. 压力测试工具-webbench

    简述 偶然情况下看到一款性能测试工具webbench,看着挺不错的记录一下安装过程,在以后项目上线过程中可以压一压一些页面的并发情况,对项目性能有个大致的了解. 原理 webbench首先fork出多 ...

  10. Python的top-level脚本为什么在磁盘上没有对应的字节码?

    在Python中,如果你使用python script.py这样的方式运行Python脚本,那么script.py就被称为top-level脚本.对于Python来说,这个脚本的字节码是不会写入到磁盘 ...