题意:

$n$个人排队打饭,第$i$个人口味$a_i$,能容忍最多身后第$b_i$个人先打饭。

先后两人$i,j$做饭时间为$a_i & a_j - a_i | a_j$

求最少时间


一开始想$f[i][s]$表示第$i$个人身后人吃饭集合$s$,第$i$个人最后吃完的状态,发现没法转移

这时候应该考虑给状态加维

$f[i][s][k]$表示前$i-1$人吃完,$i$身后包括$i$的吃饭集合为$s$,最后一个吃完的人是$k$的最短时间

如果$i$吃完了,可以直接转移到$i+1$;否则枚举下一个谁吃饭,注意满足容忍度要求

还有一点重要:$f[i]$的时候集合$s$是可以出现大于$b[i]$的人吃完饭的,因为$s$中的$i$有可能已经吃完饭了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=,S=(<<)+,INF=1e9;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,a[N],b[N];
inline int w(int i,int j){
return i<= ? : (a[i]|a[j]) - (a[i]&a[j]);
}
int f[N][S][],Z=;
int main(){
freopen("in","r",stdin);
int T=read();
while(T--){
n=read();
for(int i=;i<=n;i++) a[i]=read(),b[i]=min(read(),n-i);
memset(f,,sizeof(f));
f[][][Z-]=;
for(int i=;i<=n;i++){
int All=<<;
for(int s=;s<All;s++)
for(int k=-;k<=;k++) if(f[i][s][k+Z]<INF){
int now=f[i][s][k+Z];
if(s&) {int &t=f[i+][s>>][k-+Z];t=min(t,now);continue;}
int lim=;
for(int j=;j<=lim;j++) if( ((<<j)&s)== ){
int &t=f[i][s|(<<j)][j+Z];
t=min(t,now+w(i+k,i+j));
lim=min(lim,j+b[i+j]);
}
}
}
int ans=INF;
for(int k=-;k<=-;k++) ans=min(ans,f[n+][][k+Z]);
printf("%d\n",ans);
}
}

BZOJ 1226: [SDOI2009]学校食堂Dining [DP 状压]的更多相关文章

  1. bzoj 1226 [SDOI2009]学校食堂Dining(状压DP)

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

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

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

  3. 【bzoj1226】【[SDOI2009]学校食堂Dining】状压dp

    (上不了p站我要死了,侵权度娘背锅) Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人 ...

  4. BZOJ1226 [SDOI2009]学校食堂Dining 【状压dp】

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

  5. [luoguP2157] [SDOI2009]学校食堂Dining(状压DP)

    传送门 这种鬼畜的状压DP...第一次见 看到 0 <= Bi <= 7 就应该想到状态压缩,然而此题实在太鬼畜,想到也没什么乱用 f[i][j][k]表示前i-1个人全部吃完,i~i+7 ...

  6. BZOJ 1226 [SDOI2009]学校食堂Dining ——状压DP

    看到B<=8,直接状态压缩即可. dp[i][j][k]表示当前相对位置是关于i的,并且i以前的已经就餐完毕,j表示i和之后的就餐情况,k表示上一个就餐的人的相对位置. 然后Dp即可 #incl ...

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

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

  8. 【BZOJ1226】学校食堂Dining(状压DP)

    题意:见题面 思路:设dp[i,sta,k]为前i个人已经吃完,从第i人到第i+b[i]人的吃饭状况是sta,前一个吃完的人离i的距离是k(可能为负)的最小值 \[ dp[i+1,sta>> ...

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

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

随机推荐

  1. SG 函数 S-Nim

    http://poj.org/problem?id=2960 S-Nim Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 34 ...

  2. 微信小程序 登录流程规范解读

    一. 官方登录时序图 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端: - 微信小程序客户端 - 第三方服务器端(自己搭建) - 微信服务器端 1. 客户端获得code,并将c ...

  3. Android按下home键后重新打开app进入主activity的问题

    问题阐述: 当我们写一款App的时候,势必会有这种情况:用户已经进行了多级的操作,现返回栈中已存在多个activity,那么这个时候我们想回到最初的activity难道要一层层的返回吗,对用户来说 无 ...

  4. JAVA 键盘输入数组,输出数组内容和最大值、最小值

    package shuzu; import java.util.Scanner; import java.util.Arrays; public class shuzu { /** * @param ...

  5. 将本地的项目导入到github仓库总结lxw

    关键步骤: 第一:git clone https://github.com/lxw18231857001/demo-.git           #把github上面的仓库克隆到本地 本地项目文件夹下 ...

  6. 用dedecms做网站时,空间服务器选择IIS还是apache???

    想做一个dedecms程序的网站,不知道要选择什么样的空间,windows还是linux的?多大的空间比较适合?求高人回答.   如果是基于Linux平台的话,那不必多说自然是Apache了,因为II ...

  7. git gui提交无法获知你的身份 20

    刚刚学习,请说的详细一些,谢谢 callct | 浏览 3382 次 我有更好的答案 1条回答 你没有定义你的名字和邮箱.你打开git console/shell, #输入下面两句,并且替换成你的名字 ...

  8. ecshop_添加最新评论

    第一步: 在includes/lib_goods.php里面构建自定义函数 代码如下: /**  * 获取最近评论 *  * @return array  */ function get_latest ...

  9. asp.net -mvc框架复习(9)-实现用户登录控制器和视图的编写并调试

    1.编写控制器 三个步骤: [1]获取数据 [2]业务处理 [3]返回数据 using System;using System.Collections.Generic;using System.Lin ...

  10. angular4 中自定义pagination组件

    你用Angular 吗? 一.介绍 一个基于angular4 开发的可以分页的组件.组件的好处就是可以复用,复用.....作为一个前端码农,开始的分页功能实现是我用jquery写的,其他同事用的时候都 ...