五维dp,记忆化搜索会MLE超内存,所以用滚动数组,十分经典

五维dp

#include <bits/stdc++.h>

using namespace std;
const int maxn=;
int n,tp[maxn],now[][][][],last[][][][];
char s[maxn];
int trans(char c){
if(c=='M')return ;
if(c=='F')return ;
if(c=='B')return ;
return -;
}
int judge(int a,int b,int c){
if(!a && !b) return ;
if(!a )return (b!=c)+;
if(a==b && b==c)return ;
return (a!=b)+(b!=c)+(c!=a);
}
int main(){
//freopen("77.in","r",stdin);
//freopen("77.out","w",stdout);
scanf("%d",&n);
scanf("%s",s);
for(int i=;i<=n;i++)
tp[i]=trans(s[i-]);
for(int i=n;i>=;i--){
memset(now,,sizeof now);
int p1,p2;
for(int a1=;a1<=;a1++)
for(int a2=;a2<=;a2++)
for(int b1=;b1<=;b1++)
for(int b2=;b2<=;b2++){
p1=judge(a1,a2,tp[i]),p2=judge(b1,b2,tp[i]);
now[a1][a2][b1][b2]=max(last[a2][tp[i]][b1][b2]+p1,last[a1][a2][b2][tp[i]]+p2);
}swap(now,last);
}
printf("%d",last[][][][]);
return ;
}

记忆化搜索

#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=;
int n,tp[maxn],f[maxn][][][][]; int trans(char c){
if(c=='M')return ;
if(c=='F')return ;
if(c=='B')return ;
return -;
}
int judge(int a,int b,int c){
if(!a && !b) return ;
if(!a )return (b!=c)+;
if(a==b && b==c)return ;
return (a!=b)+(b!=c)+(c!=a);
}
int dp(int now,int a1,int a2,int b1,int b2){
if(now>n) return ;
if(f[now][a1][a2][b1][b2]) return f[now][a1][a2][b1][b2];
f[now][a1][a2][b1][b2]=max( dp(now+,a2,tp[now],b1,b2)+judge(a1,a2,tp[now]),dp(now+,a1,a2,b2,tp[now])+judge(b1,b2,tp[now]) );
return f[now][a1][a2][b1][b2];
}
char s[maxn];
int main(){
freopen("77.in","r",stdin);
freopen("77.out","w",stdout);
scanf("%d",&n);
scanf("%s",s);
for(int i=;i<=n;i++){
int t=trans(s[i-]);
tp[i]=t;
}printf("%d\n",dp(,,,,));
return ;
}

用于复习了

luogu 4401 矿工配餐 多维dp的更多相关文章

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

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

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

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

  3. bzoj1806 [Ioi2007]Miners矿工配餐

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

  4. [IOI2007]Miners 矿工配餐

    link 其实就是一个比较简单的$IOI$题.简单$dp$就行,设$5$维$dp$即可 最后在滚动一下,判一下可行性即可. #include<iostream> #include<c ...

  5. BZOJ 1806 矿工配餐(DP)

    很水的DP. 因为每一个餐车的加入只需要知道当前矿洞的前两个餐车种类就行了.而餐车一共就三种. 所以令dp[i][Sa][Sb]表示前i辆餐车送餐完毕后第一个矿洞的前两个餐车种类为Sa,第二个矿洞的前 ...

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

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

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

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

  8. Vijos1386 IOI2007 矿工配餐 动态规划

    感觉早些年IOI的题都不难啊,也就NOIp难度……现在貌似变难了 状态用dp[n][a1][b1][a2][b2]表示 n表示处理到前n个餐车 第一组矿工得到的最近一种食物用a1表示,a1的上一种食物 ...

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

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

随机推荐

  1. 转《Angular4项目部署到服务器上刷新404解决办法》

    刚遇到Angular4项目npm run build 后部署到服务器可以访问,但是刷新页面会出现404的错误!转载一大神的操作 解决angular2页面刷新后报404错误办法: 配置app.modul ...

  2. python之tkinter使用-复选框操作

    # tkinter复选框操作 import tkinter as tk root = tk.Tk() root.title('问卷调查') root.geometry('220x80') # 设置窗口 ...

  3. AWS、Azure和Google的云容器注册表有什么区别?

    亚马逊云计算服务(AWS).谷歌云服务和微软Azure,这三大公共云平台都提供Docker容器注册表.虽然他们的产品看起来很相似,但开发人员在做出选择之前,应该先了解价格和功能方面的差异. 公共云供应 ...

  4. BZOJ4001 TJOI2015概率论(生成函数+卡特兰数)

    设f(n)为n个节点的二叉树个数,g(n)为n个节点的二叉树的叶子数量之和.则答案为g(n)/f(n). 显然f(n)为卡特兰数.有递推式f(n)=Σf(i)f(n-i-1) (i=0~n-1). 类 ...

  5. 自学Python5.4-类 _init_方法

    自学Python之路 自学Python5.4-类  _init_方法 1. 定义一个类 定义一个类的格式如下:

  6. 沉迷Link-Cut tree无法自拔之:[BZOJ3669][Noi2014] 魔法森林

    来自蒟蒻 \(Hero \_of \_Someone\) 的 \(LCT\) 学习笔记 $ $ 有一个很好的做法是 \(spfa\) ,但是我们不聊 \(spfa\) , 来聊 \(LCT\) \(L ...

  7. luogu4269 Snow Boots G (并查集)

    对于某个靴子,如果0代表某个格能走,1代表不能走,那么只要连续的1的个数的最大值>=靴子的步长,那这个靴子就不能用. 那么只要对靴子和格子都按深度排个序,然后从大到小来扫一遍(靴子越来越浅,能走 ...

  8. 【洛谷P3600】 随机数生成器

    https://www.luogu.org/problem/show?pid=3600#sub (题目链接) 题意 一个$n$个数的序列,里面每个数值域为$[1,X]$.给$q$个区间,每个区间的权值 ...

  9. MyEclipse上有main函数类运行报错:Editor does not contain a main type

    MyEclipse下有main函数类运行报错:Editor does not contain a main type 出现这种问题的原因是,该java文件所在的包没有被MyEclipse认定为源码包. ...

  10. TCHAR和CHAR类型的互转

    http://blog.csdn.net/ahjxly/article/details/8494217 http://blog.csdn.net/b_h_l/article/details/75815 ...