【BZOJ1226】学校食堂Dining(状压DP)
题意:见题面
思路:设dp[i,sta,k]为前i个人已经吃完,从第i人到第i+b[i]人的吃饭状况是sta,前一个吃完的人离i的距离是k(可能为负)的最小值
\[ dp[i+1,sta>>1,k-1]=min(dp[i+1,sta>>1,k-1],dp[i,sta,k]) (sta and 1=1,如果i已经吃完)\]
\[dp[i,sta+1<<l,l]=min(dp[i,sta+1<<l,l],dp[i,sta,k]+w(i+k,i+l) (第i+l人吃,前一个吃的人是i+k)\]
\[w(i,j)=b[i] or b[j]-b[i] and b[j]=b[i] xor b[j]\]
注意转移的时候边界判断,是否超过l人里面最小的容忍范围
const oo=;
var dp:array[..,..,-..]of longint;
t,b:array[..]of longint;
cas,v,n,i,j,k,l,ans,r:longint; function clac(x,y:longint):longint;
begin
if x= then exit();
exit(t[x] xor t[y]);
end; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; begin
assign(input,'bzoj1226.in'); reset(input);
assign(output,'bzoj1226.out'); rewrite(output);
readln(cas);
for v:= to cas do
begin
read(n);
for i:= to n do read(t[i],b[i]);
fillchar(dp,sizeof(dp),$7f);
dp[,,-]:=;
for i:= to n do
for j:= to (<<)- do
for k:=- to do
if dp[i,j,k]<oo then
begin
if j and > then
dp[i+,j>>,k-]:=min(dp[i+,j>>,k-],dp[i,j,k])
else
begin
r:=oo;
for l:= to do
if j and (<<l)= then
begin
if i+l>r then break;
r:=min(r,i+b[i+l]+l);
dp[i,j+(<<l),l]:=min(dp[i,j+(<<l),l],dp[i,j,k]+clac(i+k,i+l));
end;
end;
end;
ans:=oo;
for i:=- to - do ans:=min(ans,dp[n+,,i]);
writeln(ans);
end;
close(input);
close(output);
end.
【BZOJ1226】学校食堂Dining(状压DP)的更多相关文章
- 【BZOJ1226】[SDOI2009]学校食堂Dining 状压DP
		[BZOJ1226][SDOI2009]学校食堂Dining Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满 ... 
- BZOJ 1226 [SDOI2009]学校食堂Dining ——状压DP
		看到B<=8,直接状态压缩即可. dp[i][j][k]表示当前相对位置是关于i的,并且i以前的已经就餐完毕,j表示i和之后的就餐情况,k表示上一个就餐的人的相对位置. 然后Dp即可 #incl ... 
- BZOJ-1226     学校食堂Dining       状态压缩DP
		1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB Submit: 588 Solved: 360 [Submit][ ... 
- BZOJ1226 SDOI2009学校食堂(状压dp)
		由于Bi<=7,考虑状压. 如果考虑前i个位置的话,状态里需要压入前7个人后7个人,显然是跑不动的. 那么改成考虑前i个人.于是设f[i][j][k]表示前i个人都已吃完饭,i+1后面7个人的吃 ... 
- [LuoguP2157][SDOI2009]学校食堂_状压dp
		学校食堂 题目链接:https://www.luogu.org/problem/P2157 数据范围:略. 题解: 发现$B$特别小,很容易想到状压. 即在$dp$的时候弄出来$f_{(i,j,k)} ... 
- luogu2157 [SDOI2009]学校食堂 局部状压
		题目大意 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ... 
- bzoj 1226 [SDOI2009]学校食堂Dining(状压DP)
		Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以 ... 
- [luoguP2157] [SDOI2009]学校食堂Dining(状压DP)
		传送门 这种鬼畜的状压DP...第一次见 看到 0 <= Bi <= 7 就应该想到状态压缩,然而此题实在太鬼畜,想到也没什么乱用 f[i][j][k]表示前i-1个人全部吃完,i~i+7 ... 
- BZOJ 1226 学校食堂(状压DP)
		状压DP f(i,j,k)表示前i−1个人已经吃了饭,且在i之后的状态为j的人也吃了饭(用二进制表示后面的状态),最后吃的那个人是i之后的第k个 (注意k可以是负数) 然后 如果j&1=1那么 ... 
- BZOJ1226: [SDOI2009]学校食堂Dining
		题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1226 状压dp. f[i][s][k]表示原顺序中前i-1个人都吃了饭,当前状态为s(i及i之 ... 
随机推荐
- Android——手机内部文件存储(作业)
			作业:把用户的注册信息存储到文件里,登录成功后读出并显示出来 activity_practice2的layout文件: <?xml version="1.0" encodin ... 
- passing argument 3 of ‘wtk_hlv_rec_init’ discards ‘const’ qualifier from pointer target type
			-Werror,编译出现如下错误: src/wtk/exam/wtk_ndx.c:154:6: error: passing argument 3 of ‘wtk_hlv_rec_init’ disc ... 
- JavaScript 中的window.event代表的是事件的状态,jquery事件对象属性,jquery中如何使用event.target
			http://wenda.haosou.com/q/1373868839069215 http://kylines.iteye.com/blog/1660236 http://www.cnblogs. ... 
- knockout+bootstrap+MVC 登录页实现
			一.环境概述 1.MVC4.0项目 2.bootstrap引入: 生产环境版本引入:在web\Content 文件夹中引入bootstrap-3.2.0-dist, 源码版本CSS引入:将bootst ... 
- Intellij Idea系列之Tomcat环境的搭建(三)
			Intellij Idea系列之Tomcat环境的搭建(三) 一. 编写背景 Intellij Idea在刚上手的时候很多人吐槽,"god, 这么难用的IDE有谁用呀?",的确,I ... 
- 用Visual Studio调试Windows和驱动程序
			由于本人能力有限,翻译不足之处敬请谅解,欢迎批评指正:sunylat@163.com Visual Studio版本:Visual Studio 2015企业版,中文环境. MSDN原文:https: ... 
- 根据 MySQL 状态优化 ---- 2. 连接数
			查看 MySQL 服务器运行的各种状态值: mysql> show global status: 2. 连接数 查看设置的最大连接数: mysql> show variables like ... 
- jQuery MiniUI开发系列之:HTML标签配置
			全部使用Javascript写一个界面,是一件很困难的事. 1)要求有较高的Javascript编程能力. 2)会造成“代码树”问题.一级又一级子"children",需要&quo ... 
- java环境
			http://www.iyunv.com/thread-65867-1-1.html http://www.360doc.com/content/15/0525/19/21365845_4732029 ... 
- Android事件分发机制(一) Touch 事件的分发和消费机制
			Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev).onInterceptTouchEvent(MotionEvent ev). ... 
