【BZOJ1226】[SDOI2009] 学校食堂】的更多相关文章

题目 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数表示.由于人手不够,食堂每次只能为一个人做菜.做每道菜所需的时间是和前一道菜有关的,若前一道菜的对应的口味是a,这一道为b,则做这道菜所需的时间为(a or b)-(a and b),而做第一道菜是不需要计算时间的.其中,or 和and 表示整数逐位或运算及逐位与运算,C语言中对应的运算符为"|&quo…
由于Bi<=7,考虑状压. 如果考虑前i个位置的话,状态里需要压入前7个人后7个人,显然是跑不动的. 那么改成考虑前i个人.于是设f[i][j][k]表示前i个人都已吃完饭,i+1后面7个人的吃饭状态为j,最后一个吃饭的人是k的答案.转移时考虑下一个吃饭的是谁即可. a|b-a&b=a^b.当然没什么用. 各种情况需要考虑的非常清楚.写的跟我一样丑的话就比较难搞了. #include<iostream> #include<cstdio> #include<cma…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1226 状压dp. f[i][s][k]表示原顺序中前i-1个人都吃了饭,当前状态为s(i及i之后的8个点,已吃饭的二进制为1),上一个吃饭的人的相对距离. 因为是对上一个吃饭的人有限制,可以让l从0到7跑一遍,并更新当前可以取到的l的界. #include<cstring> #include<iostream> #include<algorithm> #includ…
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…
这题状压DP太神了. g[i][j][k]表示前i-1个人都已打到饭,自己和后七个人打饭的情况是j,当前最后一个打饭的与i的关系是k 如果j&1==1说明当前这个人也打了饭,那么可以转移到g[i+1][j>>1][k-1]因为i+1+k-1==i+k 然后我们再枚举当前哪个人要打饭计算状态即可. 学习了hzwer的代码 #include<bits/stdc++.h> #define f(a,b,c) (g[a][b][c+8]) using namespace std; ]…
[BZOJ1226][SDOI2009]学校食堂Dining Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数表示.由于人手不够,食堂每次只能为一个人做菜.做每道菜所需的时间是和前一道菜有关的,若前一道菜的对应的口味是a,这一道为b,则做这道菜所需的时间为(a or b)-(a and b),而做第一道菜是不需要计算时间的.其中,o…
1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 730  Solved: 446[Submit][Status][Discuss] Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数表示.由于人手不够,食堂每次只能为一个人做菜.做每道…
原题传送门:P2157 [SDOI2009]学校食堂 一看题目就知道是状压dp 设f[i][j][k]表示第1到i-1个人都吃完了饭,第i个人以及后面的7个人是否打饭的状态为j,当前最后打饭的人的编号为i+k(-8<=k<=7) 开始设计状态转移方程 当j&1为真,表示i之后的7个人中,不再会有人插队到i之前 可得:f[i + 1][j >> 1][k - 1]=Min(f[i + 1][j >> 1][k -1],f[i][j][k]) 当j&1为假,…
[BZOJ1226]学校食堂(动态规划,状态压缩) 题面 BZOJ 洛谷 题解 发现\(b\)很小,意味着当前这个人最坏情况下也只有后面的一小部分人在他前面拿到饭. 所以整个结果的大致顺序是不会变化的. 对于一个人,他要占用的时间之和前面那个拿饭的人有关. 而他前面那个拿饭的人在队列中只有两种情况,一种在他前面,一种在他后面. 显然在他前面对于当前这个人是没有任何影响的,有问题的只有在他后面的人先拿饭. 所以可以状压后面哪些人在当前这个人之前拿到了饭. 所以设状态\(f[i][j][k]\)表示…
(上不了p站我要死了,侵权度娘背锅) Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数表示.由于人手不够,食堂每次只能为一个人做菜.做每道菜所需的时间是和前一道菜有关的,若前一道菜的对应的口味是a,这一道为b,则做这道菜所需的时间为(a or b)-(a and b),而做第一道菜是不需要计算时间的.其中,or 和and 表示整数逐…