bzoj千题计划286:bzoj1226: [SDOI2009]学校食堂Dining
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的更多相关文章
- BZOJ1226 [SDOI2009]学校食堂Dining 【状压dp】
题目 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数表示 ...
- BZOJ1226: [SDOI2009]学校食堂Dining
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1226 状压dp. f[i][s][k]表示原顺序中前i-1个人都吃了饭,当前状态为s(i及i之 ...
- 【BZOJ1226】[SDOI2009]学校食堂Dining 状压DP
[BZOJ1226][SDOI2009]学校食堂Dining Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满 ...
- BZOJ 1226: [SDOI2009]学校食堂Dining
1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 730 Solved: 446[Submit][ ...
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- 1226: [SDOI2009]学校食堂Dining - BZOJ
Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以 ...
- bzoj 1226 [SDOI2009]学校食堂Dining(状压DP)
Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以 ...
- 【bzoj1226】【[SDOI2009]学校食堂Dining】状压dp
(上不了p站我要死了,侵权度娘背锅) Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人 ...
- [SDOI2009]学校食堂Dining
题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...
随机推荐
- java监听器(Listener)学习笔记
现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次, ...
- 设计模式 笔记 策略模式 Strategy
//---------------------------15/04/28---------------------------- //Strategy 策略模式----对象行为型模式 /* 1:意图 ...
- tcp ,http .udp
三次握手,四次挥手要知道,记住. 计算机协议常见面试题,学会了,记住.会运用.
- Unity接SDK通用方法总结
第一篇博客,回顾接UnitySDK的坑 接SDK主要有两种方式,第三方SDK和手动接(我用的android studio) 首先接触到的SDK就是Facebook-Unity的SDK,主要就是face ...
- C语言版本:双链表的实现
Dlist.h #ifndef __DLIST_H__ #define __DLIST_H__ #include<cstdio> #include<malloc.h> #inc ...
- Day Nine
站立式会议 站立式会议内容总结 331 今天:学习plupload 遇到问题:无 明天:学习中文分词 442 今天:解决gradle以及项目计划页面的bug 遇到的问题:调用工具类以及配置gradle ...
- VS2013安装及测试
一.Visual Studio的安装 首先是Visual Studio英文版的安装,安装完成后,为了用的时候方便,我从官网下载Visual Studio 2013的语言包并安装. 二.进行单元测试. ...
- 我们的团队-IT梦想队
IT梦想队 队长:李遇塘 队员:王长.周兴荣.朱岭杰.马婧婧 团队宣言: 一匹狼战斗力低,但一群狼的我们无所畏惧!李遇塘http://www.cnblogs.com/Liyutang/ 王 长htt ...
- MySQL与Spring事务隔离级别
https://zhuanlan.zhihu.com/p/27887568 能画第一张表,根据表描述.
- [51CTO]区块链在美国:10个案例、10个问题和5个解决方案
区块链在美国:10个案例.10个问题和5个解决方案 近日,美国国际战略研究中心(CSIS, Center for Strategic and International Studies)发布报告< ...