http://www.lydsy.com/JudgeOnline/problem.php?id=1226

关键点:一个人只能忍受 ‘紧跟’ 在他 后面的b个人比他先打到饭

dp[i][j][k] 前i-1个人已经打完了饭,第i个人和他后面的7个人 是否打上饭的状态为j,当前最后一个已经打到饭的人是k

b至多只有7,所以k可以修改为 当前最后一个已经打到饭的人与i的位置关系为k,k∈[-8,7]

转移:

若j&1 == true,说明 第i个人已经打上了饭,那么 推移到下一个人 即可 dp[i+1][j>>1][k-1] = min (dp[i+1][j>>1][k-1],dp[i][j][k])

否则, 枚举 谁打饭,dp[i][j|1<<h][k+h]=min( dp[i][j|1<<h][k+h] , dp[i][j][k]+cost(i+k,i+h))

注意在枚举的过程中,时刻要保证当前枚举的人 在前面没有打饭的人的忍耐度 之内

还有第1个打饭的人不需要时间,所以初始时时 dp[1][0][-1]=0,其余dp[i][j][k]=inf

这样当i+k=0 时,前一个打饭的是第0个人,那么现在打饭的就是第一个人

#include<cstdio>
#include<cstring>
#include<iostream> using namespace std; #define N 1003
const int M=<<; int t[N],b[N]; int dp[N][M+][]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} int cost(int i,int j)
{
if(!i) return ;
return (t[i]|t[j])-(t[i]&t[j]);
} inline void min(int &i,int j)
{
i=j<i ? j : i;
} int main()
{
int T,n,inf,lim,ans;
read(T);
while(T--)
{
read(n);
for(int i=;i<=n;++i)
{
read(t[i]); read(b[i]);
min(b[i],n-i);
}
memset(dp,,sizeof(dp));
inf=dp[][][];
dp[][][-+]=;
for(int i=;i<=n;++i)
for(int j=;j<M;++j)
for(int k=-;k<=;++k)
if(dp[i][j][k+]!=inf)
if(j&) min(dp[i+][j>>][k-+],dp[i][j][k+]);
else
{
lim=b[i];
for(int h=;h<=lim;++h)
if(!(<<h&j))
{
min(dp[i][j|<<h][h+],dp[i][j][k+]+cost(i+k,i+h));
min(lim,h+b[i+h]);
}
}
int ans=inf;
for(int i=-;i<=-;++i) min(ans,dp[n+][][i+]);
printf("%d\n",ans);
}
}

bzoj千题计划286:bzoj1226: [SDOI2009]学校食堂Dining的更多相关文章

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

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

  2. BZOJ1226: [SDOI2009]学校食堂Dining

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1226 状压dp. f[i][s][k]表示原顺序中前i-1个人都吃了饭,当前状态为s(i及i之 ...

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

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

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

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

  5. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

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

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

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

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

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

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

  9. [SDOI2009]学校食堂Dining

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

随机推荐

  1. identityServer4 中的概念(Scope,claim)

    在IdentityServer中好多地方出现这几个词,这单词的解释也有好多大神解释过: chaim: ASP.NET Core 之 Identity 入门(一),这个是asp.net identity ...

  2. 《深入浅出NodeJS》mindmap

    接触NodeJS有快两年了,但因为和我的工作内容关系不大,所以一直没有系统的学习.最近终于有空能系统地了解学习一下这门技术,于是买了一本朴灵老师的<深入浅出NodeJS>仔细研读.这本书内 ...

  3. node基础:文件系统-文件读取

    node的文件读取主要分为同步读取.异步读取,常用API有fs.readFile.fs.readFileSync.还有诸如更底层的fs.read,以及数据流(stream),后面再总结下咯~ 直接上简 ...

  4. jupyter notebook 更改工作环境和浏览器

    转载自:https://blog.csdn.net/u011141114/article/details/78556227 1 修改默认目录 最近刚刚开始学习Python,比较好的一个IDE就是jup ...

  5. 二叉树 c++

    树 非空树 有一个(root)根节点r 其余节点可分为m个互不相交的有限集(子树)T1....Tm 具有n个节点的树,具有(n-1)条连接(指针域),需要构成结构体,尽可能减少空间域的浪费,使用儿子兄 ...

  6. C/C+ 感触

    1.       C/C++语言开发的首选利器- C++Test       以前在windows平台下的开发,使用的框架主要是MFC,以及console工程(基于win32SDK),属于纯C/C++ ...

  7. 剑指offer:二叉树的深度

    题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路: 这道题也是递归的思路,比较简单. 做的过程中遇到的一个 ...

  8. 关于使用实验室服务器的GPU以及跑上TensorFlow代码

    连接服务器 Windows - XShell XFtp SSH 通过SSH来连接实验室的服务器 使用SSH连接已经不陌生了 github和OS课设都经常使用 目前使用 192.168.7.169 使用 ...

  9. Hyper-V下WINXP无网卡问题解决

  10. [Java]Object有哪些公用方法?

    1.clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常. 主要是JAVA里除了8种基本类型传 ...