luogu 4401 矿工配餐 多维dp
五维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的更多相关文章
- BZOJ 1806: [Ioi2007]Miners 矿工配餐( dp )
dp... ------------------------------------------------------------------------------- #include<cs ...
- [Ioi2007]Miners 矿工配餐(BZOJ1806)
[Ioi2007]Miners 矿工配餐 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 214 Solved: 128 Description 现有两 ...
- bzoj1806 [Ioi2007]Miners矿工配餐
[bzoj1806][Ioi2007]Miners 矿工配餐 2014年7月10日1,7870 Description 现有两个煤矿,每个煤矿都雇用一组矿工.采煤工作很辛苦,所以矿工们需要良好饮食.每 ...
- [IOI2007]Miners 矿工配餐
link 其实就是一个比较简单的$IOI$题.简单$dp$就行,设$5$维$dp$即可 最后在滚动一下,判一下可行性即可. #include<iostream> #include<c ...
- BZOJ 1806 矿工配餐(DP)
很水的DP. 因为每一个餐车的加入只需要知道当前矿洞的前两个餐车种类就行了.而餐车一共就三种. 所以令dp[i][Sa][Sb]表示前i辆餐车送餐完毕后第一个矿洞的前两个餐车种类为Sa,第二个矿洞的前 ...
- 【bzoj1806】[Ioi2007]Miners 矿工配餐 dp
题目描述 有n个物品,每个都是3种之一.现要将这n个物品分成两个序列,对于每个序列中的每个物品,可以得到 它及它前面相邻的两个物品(不足则取全部)中不同种类的个数 的收益.问最大的总收益. 输入 输入 ...
- bzoj 1806 [Ioi2007]Miners 矿工配餐(DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1806 [题意] 给定一个权在1..3内的序列,在保持相对位置不变的情况下拆分成两个序列 ...
- Vijos1386 IOI2007 矿工配餐 动态规划
感觉早些年IOI的题都不难啊,也就NOIp难度……现在貌似变难了 状态用dp[n][a1][b1][a2][b2]表示 n表示处理到前n个餐车 第一组矿工得到的最近一种食物用a1表示,a1的上一种食物 ...
- [bzoj1806] [ioi2007]Miners 矿工配餐
相当于noip前两题难度的ioi题........ 还是挺好想的...算是状压一下?...两个二进制位可以表示三种食物或者没有,所以用四个二进制位表示某个煤矿最近两餐的情况... 先把各种情况加上各种 ...
随机推荐
- Java之StringBuffer使用方法
package basic; //StringBuffer的使用方法,用于保存频繁修改的字符串 public class StringBufferDemo { public static void m ...
- Lodop调整打印项输出顺序 覆盖与层级
Lodop中的打印项,如果有输出在同一位置,或部分位置重叠的地方,打印项之间是怎么覆盖的呢?在JS里,按照Lodop语句打印项先后的执行顺序,先执行的先输出,后执行的后输出,如果有后面的打印项和前面的 ...
- java 里面的 native 方法
第一篇: 今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解. 一. 什么是Native Method 简单地讲,一个Native Meth ...
- 利用可变参数打印log
// ConsoleApplication1.cpp: 定义控制台应用程序的入口点. // #pragma once #include <string> #include <Wind ...
- BZOJ3585&3339mex——主席树
题目描述 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入 第一行n,m.第二行为n个数.从第三行开始,每行一个询问l,r. 输出 一行一个 ...
- 【Linux】Centos7 解压zip文件
如果输入unzip无反应那么请安装相应软件包 yum install -y unzip 语法 unzip [参数] [文件] 参数 -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换: -f:更新 ...
- WordPress 之 在注册界面 实现 注册后密码直接显示在页面上
前言:WordPress 功能无疑强大的,但有些功能实现上还是有少许不尽人意,比如在 网站上有新用户注册后,必须下发到用户填写的邮件才能接收到新密码,而密码又是系统自动生成的,如果因为某些原因用户接收 ...
- importlib 模块
根据字符串的模块名实现动态导入模块的库 目录结构 ├── aaa.py ├── bbb.py └── mypackage ├── __init__.py └── xxx.py bbb.py impor ...
- 今天一天课,随便写点吧/xk
知道的越多,不知道的也就越多. 最近想学很多很多东西,但是发现没有一个计划,也没有那么多时间精力,都是想到哪学到哪,有的就是学了一半就放下了,又去学新的,感觉需要规划一下学习路线,时间什么的 推荐一个 ...
- SharePoint 2013 event id 8321 错误
SharePoint 2013里会报8321的错误: A certificate validation operation took 15011.1412 milliseconds and has e ...