Description

小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭。学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴。当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数表示。由于人手不够,食堂每次只能为一个人做菜。做每道菜所需的时间是和前一道菜有关的,若前一道菜的对应的口味是a,这一道为b,则做这道菜所需的时间为(a or b)-(a and b),而做第一道菜是不需要计算时间的。其中,or 和and 表示整数逐位或运算及逐位与运算,C语言中对应的运算符为“|”和“&”。学生数目相对于这个学校还是比较多的,吃饭做菜往往就会花去不少时间。因此,学校食堂偶尔会不按照大家的排队顺序做菜,以缩短总的进餐时间。虽然同学们能够理解学校食堂的这种做法,不过每个同学还是有一定容忍度的。也就是说,队伍中的第i 个同学,最多允许紧跟他身后的Bi 个人先拿到饭菜。一旦在此之后的任意同学比当前同学先拿到饭,当前同学将会十分愤怒。因此,食堂做菜还得照顾到同学们的情绪。现在,小F 想知道在满足所有人的容忍度这一前提下,自己的学校食堂做完这些菜最少需要多少时间。

Input

第一行包含一个正整数C,表示测试点的数据组数。每组数据的第一行包含一个正整数N,表示同学数。每组数据的第二行起共N行,每行包含两个用空格分隔的非负整数Ti和Bi,表示按队伍顺序从前往后的每个同学所需的菜的口味和这个同学的忍受度。每组数据之间没有多余空行。

Output

包含C行,每行一个整数,表示对应数据中食堂完成所有菜所需的最少时间。

题解:

题意还是很好理解的,首先(a or b)-(a and b)就是a^b啊。

状压dp,令f[i][j][k]表示前i-1个人已经全部点完餐,当前第i个人以及之后的7人的点餐状态为j,上一个点餐的人与i的坐标差为k-8,(因为上一个人可能是-8到7)。

然后就有很显然的方程了。

如果第i个人已经点餐,则状态可转移成f[i+1][j>>1][k-1]

否则考虑下一点餐的是谁,从i到i+7全部for一遍,如果超过容忍度的话,就break掉。

代码:

#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}
#define MN 1005
#define inf 2139062143
int T,t[MN],b[MN],n;
int f[MN][][];
void rw(int &x,int y){if(y<x)x=y;}
int main(){
T=read();
register int i,j,k,h,lir;
while(T--){
n=read();
for(i=;i<=n;i++) t[i]=read(),b[i]=read();
memset(f,0x7f,sizeof f);f[][][]=;
for(i=;i<=n;i++)for(j=;j<(<<);j++)
for(k=-;k<=;k++)if(f[i][j][k+]!=inf){
if(j&&&k+) rw(f[i+][j>>][k+],f[i][j][k+]);
else{
lir=inf;
for(h=;h<=;h++)if(!((j>>h)&)){
if(i+h>lir) break;
rw(lir,i+h+b[i+h]);
rw(f[i][j|(<<h)][h+],f[i][j][k+]+(i+k?(t[i+k]^t[i+h]):));
}
}
}
int ans=inf;
for(int i=;i<=;i++) rw(ans,f[n+][][i]);
printf("%d\n",ans);
}
return ;
}

来自PaperCloud的博客,未经允许,请勿转载,TKS

最新文章

  1. C#中将DataTable转成List
  2. app推送中的通知和消息区别
  3. ES6新特性(函数默认参数,箭头函数)
  4. Bzoj-2820 YY的GCD Mobius反演,分块
  5. html 标记语言
  6. Three Swaps DFS
  7. 在SQL 中生成JSON数据
  8. Quiz 6b Question 8————An Introduction to Interactive Programming in Python
  9. UILabel设置富文本格式显示
  10. MindManager 安装注册
  11. vue初级学习--组件的使用(自定义组件)
  12. ASP.NET Core 认证与授权[7]:动态授权
  13. PyQT5 helloworld教程(转载)
  14. L2-005 集合相似度 (25 分) (STL——set)
  15. php中 curl, fsockopen ,file_get_contents 三个函数
  16. 20135327郭皓--Linux内核分析第八周 进程的切换和系统的一般执行过程
  17. IDEA如何自动提示并补全syso和main呢?
  18. 怎样在win7 IIS中部署网站?
  19. pyquery学习笔记
  20. JS禁止后退键(backspace)使浏览器后退

热门文章

  1. 网络编程-tcp三次握手和四次挥手
  2. javascript 区域外事件捕捉setCapture
  3. 【Bug】MQ消息与事务提交
  4. VueCli3 使用 NutUI (按需加载、定制化主题)
  5. 16寸屏苹果MacBook Pro悄悄上市,售价18999 元起步
  6. 杭电OJ BestCoder28期1001Missing number问题(小技巧偏移法)
  7. 登录-redis
  8. vim、gvim 在 windows 下中文乱码的终极解决方案
  9. 检查SQL Server数据库各个库表空间使用的方法
  10. python实现抖音多线程下载无水印视频【附源码】