题意简述

每个人有一个口味,食堂每次只能为一个人做菜

做每道菜所需的时间是和前一道菜有关的,若前一道菜的对应的口味是a,这一道为b,则做这道菜所需的时间为a 异或 b

每个人都有一个容忍度,最多允许紧跟他身后的Bi 个人先拿到饭菜,

求食堂完成所有菜所需的最少时间

题解思路

使用状态压缩。f[i][j][k]表示当前处理第i个人,上一个吃过的人是k,j为第i个人后面7个人的吃饭状态

如果j & 1 == 1,dp[i + 1][j >> 1][k + 7] = minn(dp[i + 1][j >> 1][k + 7], dp[i][j][k + 8]

否则选出i及后面7个人中的一个吃饭,判断一下容忍度

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
int C, n, r, ans;
int t[1010], b[1010];
int dp[1010][260][20];
int minn(int &x, int y) {x = min(x, y); }
int calc(int i, int k, int l) {return i + k ? t[i + k] ^ t[i + l] : 0; }
int main()
{
scanf("%d", &C);
while (C--)
{
ans = INF;
memset(dp, INF, sizeof(dp));
scanf("%d", &n);
dp[1][0][7] = 0;
for (register int i = 1; i <= n; ++i)
scanf("%d%d", &t[i], &b[i]);
for (register int i = 1; i <= n; ++i)
for (register int j = 0; j < 256; ++j)
for (register int k = -8; k <= 7; ++k)
if (dp[i][j][k + 8] != INF)
if (j & 1) minn(dp[i + 1][j >> 1][k + 7], dp[i][j][k + 8]);
else
for (register int l = 0, r = INF; l <= 7; ++l)
if (!((j >> l) & 1) && i + l <= r)
{
minn(r, i + l + b[i + l]);
minn(dp[i][1 << l | j][l + 8], dp[i][j][k + 8] + calc(i, k, l));
}
for (register int i = 0; i <= 8; ++i)
minn(ans, dp[n + 1][0][i]);
printf("%d\n", ans);
}
}

洛谷 P2157 [SDOI2009]学校食堂的更多相关文章

  1. BZOJ1226或洛谷2157 [SDOI2009]学校食堂

    BZOJ原题链接 洛谷原题链接 注意到\(B[i]\)很小,考虑状压\(DP\). 设\(f[i][j][k]\)表示前\(i - 1\)个人已经拿到菜,第\(i\)个人及其后面\(7\)个人是否拿到 ...

  2. 洛谷 P2051 [SDOI2009]学校食堂

    传送门- 题目分析:首先,我们先看看做菜时间的运算机制.$(A~\texttt{or}~B)-(A~\texttt{and}~B)$这个试子看起来有点复杂(因为我太菜了),仔细想想,是不是可以转化为$ ...

  3. 【题解】Luogu P2157 [SDOI2009]学校食堂

    原题传送门:P2157 [SDOI2009]学校食堂 一看题目就知道是状压dp 设f[i][j][k]表示第1到i-1个人都吃完了饭,第i个人以及后面的7个人是否打饭的状态为j,当前最后打饭的人的编号 ...

  4. P2157 [SDOI2009]学校食堂

    题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...

  5. P2157 [SDOI2009]学校食堂 (dp+状态压缩)

    题目链接:传送门 题目: 题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人 ...

  6. P2157 [SDOI2009]学校食堂Dining

    题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...

  7. P2157 [SDOI2009]学校食堂 状压DP

    题意: 排队买饭,时间为前一个人和后一个人的异或和,每个人允许其后面B[i] 个人先买到饭,问最少的总用时. 思路: 用dp[i][j][k] 表示1-i-1已经买好饭了,第i个人后面买饭情况为j,最 ...

  8. BZOJ 1226: [SDOI2009]学校食堂Dining

    1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 730  Solved: 446[Submit][ ...

  9. 【BZOJ1226】[SDOI2009]学校食堂Dining 状压DP

    [BZOJ1226][SDOI2009]学校食堂Dining Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满 ...

随机推荐

  1. CDQZ集训DAY5 日记

    又一个爆炸的一天…… 早上起来发现貌似是周末,七中放假(别人家的学校(一周一放,一放两天)……)然而感觉状态不是很好,感觉药丸. 题目一上来就装弱,有诈.第一题上来先打暴力,T2不知道怎么打.T3暴力 ...

  2. ServiceFabric极简文档-1.2 硬件环境.md

    1. 一个C盘,100G,16G内存,2.5HZ2. 官网有推荐配置

  3. mvc区分页面内请求判断是否是Html.action或Html.RenderAction请求

    ControllerContext.IsChildAction 来判断,如果用Html.Action或Html.RenderAction方法,这个属性返回true,否则返回false

  4. R030---手把手教程:你有一条RPA发送的工资条待查收

    ​一.缘起 前2天写了<R029---简述:用UiPath实现RPA(工作流程自动化)(基础知识篇)>,本篇作为补充. 实战出真知,以做代学,下面以一个HR的真实场景举例实践,用UiPat ...

  5. rabbitmq升级新版本后,需要新建用户。新版本默认禁止别的机器用guest用户访问。

    rabbitmq升级新版本后,需要新建用户.新版本默认禁止别的机器用guest用户访问.

  6. 从似然函数到EM算法(附代码实现)

    1. 什么是EM算法 最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型 ...

  7. Excel催化剂开源第15波-VSTO开发之DataTable数据导出至单元格区域

    上篇提到如何从Excel界面上拿到用户的数据,另外反方向的怎样输出给用户数据,也是关键之处. VSTO最大的优势是,这双向的过程中,全程有用户的交互操作. 而一般IT型的程序,都是脱离用户的操作,只能 ...

  8. Java IO部分面试题

    1.什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多少,各有什么区别 1. Bit最小的二进制单位 ,是计算机的操作部分 取值0或者1 2. Byte是计算机操作数据 ...

  9. 推荐:经典SQL语句大全

    一.基础 .说明:备份sql server--- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mss ...

  10. Java编程基础阶段笔记 day01 Java语言概述

    ​目录内容 DOS命令 电脑配置 Java语言的特性 Java两种核心机制 Java语言环境搭建 第一个Java程序 注释 Java语句说明 编程风格 作业 常用的DOS命令 dir :    列出当 ...