洛谷 P4401 [IOI2007]Miners 矿工配餐
题意简述
有两个矿洞,已知食物的种类(≤3)和顺序,将他们送往任一矿洞,
若一个矿洞3次食物相同,贡献1;若有2种不同食物,贡献2;若有3种不同食物,贡献3
求最大贡献
题解思路
food[i] 为当前食物
dp[i][i1][i2][i3][i4]表示当前是第i个食物,第一个矿洞前两次食物为i1, i2,第二个矿洞前两次食物为i3, i4
dp[i][i2][food[i]][i3][i4] = (dp[i - 1][i1][i2][i3][i4] + (i1, i2, food[i]) 的贡献, dp[i][i2][food[i]][i3][i4]);
dp[i][i1][i2][i4][food[i]] = (dp[i - 1][i1][i2][i3][i4] + (i3, i4, food[i]) 的贡献, dp[i][i1][i2][i4][food[i]]);
代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n, ans;
int food[100010];
int dp[2][4][4][4][4];
char ch;
void maxx(int &x, int y) {x = max(x, y); }
int calc(int x, int y, int z) {return (y && y != z) + (x && x != y && x != z) + 1; }
int main()
{
scanf("%d", &n);
for (register int i = 1; i <= n; ++i)
{
cin >> ch;
food[i] = ch == 'M' ? 1 : ch == 'F' ? 2 : 3;
}
memset(dp, -1, sizeof dp);
dp[0][0][0][0][0] = 0;
for (register int i = 1; i <= n ;++i)
for (register int i1 = 0; i1 <= 3; ++i1)
for (register int i2 = 0; i2 <= 3; ++i2)
for (register int i3 = 0; i3 <= 3; ++i3)
for (register int i4 = 0; i4 <= 3; ++i4)
if (dp[(i - 1) & 1][i1][i2][i3][i4] != -1)
{
maxx(dp[i & 1][i2][food[i]][i3][i4], dp[(i - 1) & 1][i1][i2][i3][i4] + calc(i1, i2, food[i]));
maxx(dp[i & 1][i1][i2][i4][food[i]], dp[(i - 1) & 1][i1][i2][i3][i4] + calc(i3, i4, food[i]));
}
for (register int i1 = 0; i1 <= 3; ++i1)
for (register int i2 = 0; i2 <= 3; ++i2)
for (register int i3 = 0; i3 <= 3; ++i3)
for (register int i4 = 0; i4 <= 3; ++i4)
maxx(ans, dp[n & 1][i1][i2][i3][i4]);
printf("%d\n", ans);
}
洛谷 P4401 [IOI2007]Miners 矿工配餐的更多相关文章
- [Ioi2007]Miners 矿工配餐(BZOJ1806)
[Ioi2007]Miners 矿工配餐 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 214 Solved: 128 Description 现有两 ...
- BZOJ 1806: [Ioi2007]Miners 矿工配餐( dp )
dp... ------------------------------------------------------------------------------- #include<cs ...
- bzoj1806 [Ioi2007]Miners矿工配餐
[bzoj1806][Ioi2007]Miners 矿工配餐 2014年7月10日1,7870 Description 现有两个煤矿,每个煤矿都雇用一组矿工.采煤工作很辛苦,所以矿工们需要良好饮食.每 ...
- [bzoj1806] [ioi2007]Miners 矿工配餐
相当于noip前两题难度的ioi题........ 还是挺好想的...算是状压一下?...两个二进制位可以表示三种食物或者没有,所以用四个二进制位表示某个煤矿最近两餐的情况... 先把各种情况加上各种 ...
- BZOJ 1806: [Ioi2007]Miners 矿工配餐
ime Limit: 10 Sec Memory Limit: 64 MBSubmit: 910 Solved: 559[Submit][Status][Discuss] Description ...
- bzoj 1806 [Ioi2007]Miners 矿工配餐(DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1806 [题意] 给定一个权在1..3内的序列,在保持相对位置不变的情况下拆分成两个序列 ...
- BZOJ 1806 IOI2007 Miners 矿工配餐 动态规划
题目大意:将一个123序列拆分为两个子序列.定义每一个数的贡献值为以这个数结尾的长度最大为3的子串中不同数的数量,求贡献值和的最大值 令f[i][a1][a2][b1][b2]为前i个数分成两组,第一 ...
- [IOI2007]Miners 矿工配餐
link 其实就是一个比较简单的$IOI$题.简单$dp$就行,设$5$维$dp$即可 最后在滚动一下,判一下可行性即可. #include<iostream> #include<c ...
- 【bzoj1806】[Ioi2007]Miners 矿工配餐 dp
题目描述 有n个物品,每个都是3种之一.现要将这n个物品分成两个序列,对于每个序列中的每个物品,可以得到 它及它前面相邻的两个物品(不足则取全部)中不同种类的个数 的收益.问最大的总收益. 输入 输入 ...
随机推荐
- Java学习笔记之---流程控制语句
Java学习笔记之---流程控制语句 (一)循环语句 (1)if语句 if(布尔表达式){ //如果布尔表达式为true将执行的语句 } if(i%2!=0){ System.out.println( ...
- [NOIP2013]华容道 题解(搜索)
[NOIP2013]华容道 [题目描述] 这道题根据小时候玩华容道不靠谱的经验还以为是并查集,果断扑街.考后想想也是,数据这么小一定有他的道理. 首先由于是最小步数,所以BFS没跑了.那么我们大可把这 ...
- 前端经常碰到的小知识点-----js篇
一 js 1.可视区宽和高 ① document.documentElement.clientWidth //可视区的宽度 document.documentElement.clientHei ...
- Gin 框架 - 使用 logrus 进行日志记录
目录 概述 日志格式 Logrus 使用 推荐阅读 概述 上篇文章分享了 Gin 框架的路由配置,这篇文章分享日志记录. 查了很多资料,Go 的日志记录用的最多的还是 github.com/sirup ...
- iPhone调试移动端webview
一.模拟器调试 1.启动Xcode 2.选择菜单Xcode - Open Developer Tool - Simulator 3.启动Simulator后,选择Simulator菜单Hardware ...
- Spring Boot 中 Redis 的使用
Spring Boot 对常用的数据库支持外,对 Nosql 数据库也进行了封装自动化,如Redis.MongoDB等,本文主要介绍Redis的使用. Redis 介绍 Redis 是目前业界使用最广 ...
- MapReduce之提交job源码分析 FileInputFormat源码解析
MapReduce之提交job源码分析 job 提交流程源码详解 //runner 类中提交job waitForCompletion() submit(); // 1 建立连接 connect(); ...
- C#3.0新增功能09 LINQ 标准查询运算符 02 查询表达式语法
连载目录 [已更新最新开发文章,点击查看详细] 某些使用更频繁的标准查询运算符具有专用的 C# 语言关键字语法,使用这些语法可以在查询表达式中调用这些运算符. 查询表达式是比基于方法的等效项更具 ...
- DAX 第三篇:过滤器函数
过滤器函数允许你操纵筛选上下文以创建动态的计算. 一,筛选上下文的构成 DAX中的筛选上下文由三部分构成:交叉过滤构成的过滤,查询上下文中每行的列值构成的过滤,外部切片器构成的显式过滤. 1,交叉过滤 ...
- Flutter初体验--环境搭建
Fluter最近火了起来,它的有点很多,今天我做一篇在Windows下安装Flutter的教程. 一.下载 无论你要安装什么软件,都要先下载下来.我用的是SourceTree,地址: https ...