【SDOI2009】学校食堂
Description
小F的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭。学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴。当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数表示。
由于人手不够,食堂每次只能为一个人做菜。做每道菜所需的时间是和前一道菜有关的,若前一道菜的对应的口味是a,这一道为b,则做这道菜所需的时间为(a or b)-(a and b),而做第一道菜是不需要计算时间的。其中,or和and表示整数逐位或运算及逐位与运算,C语言中对应的运算符为”|”和”&”。
学生数目相对于这个学校还是比较多的,吃饭做菜往往就会花去不少时间。因此,学校食堂偶尔会不按照大家的排队顺序做菜,以缩短总的进餐时间。
虽然同学们能够理解学校食堂的这种做法,不过每个同学还是有一定容忍度的。也就是说,队伍中的第i个同学,最多允许紧跟他身后的Bi个人先拿到饭菜。一旦在此之后的任意同学比当前同学先拿到饭,当前同学将会十分愤怒。因此,食堂做菜还得照顾到同学们的情绪。
现在,小F想知道在满足所有人的容忍度这一前提下,自己的学校食堂做完所有菜最少需要多少时间。
Input
第一行包含一个正整数C,表示测试点的数据组数。
每组数据的第一行包含一个正整数N,表示同学数。
每组数据的第二行起共N行,每行包含两个用空格分隔的非负整数Ti和Bi,表示按队伍顺序从前往后的每个同学所需的菜的口味和这个同学的忍受度。
每组数据之间没有多余空行。
Output
输出包含C行,每行一个整数,表示对应数据中食堂完成所有菜所需的最少时间。
Sample Input
2
5
5 2
4 1
12 0
3 3
2 2
2
5 0
4 0
Sample Output
16
1
Hint
数据规模和约定:
对于30%的数据,满足1 ≤ N ≤ 20。
对于100%的数据,满足1 ≤ N ≤ 1,000,0 ≤ Ti ≤ 1,000,0 ≤ Bi ≤ 7,1 ≤ C ≤ 5。
存在30%的数据,满足0 ≤ Bi ≤ 1。
存在65%的数据,满足0 ≤ Bi ≤ 5。
存在45%的数据,满足0 ≤ Ti ≤ 130。
1 #include <algorithm> 2 #include <iostream> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cstdio> 6 #include <cmath> 7 using namespace std; 8 const int N=1005; 9 int t[N],b[N],f[N][19][(1<<8)+5],INF; 10 int pd(int i,int j){ 11 if(!i)return i; 12 return (t[i]|t[j])-(t[i]&t[j]); 13 } 14 void work(){ 15 int n,lim,to,mov=8; 16 scanf("%d",&n); 17 memset(f,127/3,sizeof(f));INF=f[0][0][0]; 18 for(int i=1;i<=n;i++)scanf("%d%d",&t[i],&b[i]); 19 f[1][-1+mov][0]=0; 20 for(int i=1;i<=n;i++){ 21 for(int k=0,tmp=(1<<8)-1;k<=tmp;k++){ 22 for(int j=-7;j<=7;j++){ 23 if(f[i][j+mov][k]==INF)continue; 24 if(k&1)f[i+1][j-1+mov][k>>1]=min(f[i+1][j-1+mov][k>>1],f[i][j+mov][k]); 25 lim=INF; 26 for(int g=0;g<=7;g++){ 27 if((1<<g)&k)continue; 28 if(i+g>lim)break; 29 lim=min(lim,i+g+b[i+g]); 30 to=(k|(1<<g)); 31 f[i][g+mov][to]=min(f[i][g+mov][to],f[i][j+mov][k]+pd(i+j,i+g)); 32 } 33 } 34 } 35 } 36 int ans=INF; 37 for(int i=1;i<=15;i++)ans=min(ans,f[n][i][1]); 38 printf("%d\n",ans); 39 } 40 int main() 41 { 42 freopen("dining.in","r",stdin); 43 freopen("dining.out","w",stdout); 44 int T; 45 scanf("%d",&T); 46 while(T--) 47 work(); 48 return 0; 49 }
转载于:https://www.cnblogs.com/Yuzao/p/7196022.html
【SDOI2009】学校食堂相关推荐
- P2157 [SDOI2009]学校食堂
P2157 [SDOI2009]学校食堂 题意: 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定 ...
- [SDOI2009]学校食堂
前言:经过AC这道题的过程,让我明白了一点,不要过于相信您的同伴(因为他会让您的代码wa一天还不清楚为什么).---上述观点均由StarTrek大佬背锅 题目描述 原题链接:[SDOI2009]学校食 ...
- [SDOI2009]学校食堂(状态压缩)
题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...
- 【BZOJ1226】[SDOI2009] 学校食堂
题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...
- [SDOI2009]学校食堂Dining
Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以 ...
- [SDOI2009]学校食堂Dining 洛谷p2157
题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...
- [SDOI2009]学校食堂Dining(洛谷2157)
标签:状压DP,bitset位运算 题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同 ...
- BZOJ 1226 [SDOI2009] 学校食堂Dining
Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以 ...
- BZOJ 1226: [SDOI2009]学校食堂Dining [DP 状压]
题意: $n$个人排队打饭,第$i$个人口味$a_i$,能容忍最多身后第$b_i$个人先打饭. 先后两人$i,j$做饭时间为$a_i & a_j - a_i | a_j$ 求最少时间 一开始想 ...
- BZOJ1226 SDOI2009学校食堂(状压dp)
由于Bi<=7,考虑状压. 如果考虑前i个位置的话,状态里需要压入前7个人后7个人,显然是跑不动的. 那么改成考虑前i个人.于是设f[i][j][k]表示前i个人都已吃完饭,i+1后面7个人的吃 ...
最新文章
- ICRA 2021 | π-LSAM:基于平面优化的激光雷达平滑与建图算法
- python复合数据类型_python—组合数据类型
- FastFormers:实现Transformers在CPU上223倍的推理加速
- MySQL解决root用户密码丢失问题
- Pyalgotrade量化交易回测框架
- 小新pro13 重装注意_新款小新pro 13注意什么?买前必读
- CodeForces 468 CHack it!
- 不可阻挡的PowerShell :Red Teamer告诉你如何突破简单的AppLocker策略
- arcgis栅格邻域统计_运用ArcGIS进行影像分类
- LINUX下载编译sqlite3
- Oracle数据库练习题及答案(个人总结)
- 【操作系统】CPU寄存器详解
- datatables 动态表格行合并
- spark.yarn.jars的配置
- 英语口语学习推荐的21部电影
- 改进duilib的richedit控件的部分功能
- 【hadoop】hbase配置
- UE5 使用MetaHuman 制作数字人
- sql基础_SQL基础
- Poj·Accumulation Degree